首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Rails 4中设置嵌套资源控制器?

如何在Rails 4中设置嵌套资源控制器?
EN

Stack Overflow用户
提问于 2018-08-14 07:23:40
回答 1查看 65关注 0票数 0

我的应用程序中有3个模型。用户(通过Devise)、发布和回复。用户可以是帖子和回复的父级,回复属于用户和帖子。

由于某些原因,它不会将回复保存到数据库中。在输出上,我看不到user_id。我用来创建@reply的函数是current_user.replies.create(reply_params).另外,html输出的大括号对我来说似乎有点奇怪。为什么:reply中只有:comment?知道我做错了什么吗?

型号:

代码语言:javascript
复制
              class Post < ActiveRecord::Base
                belongs_to :user
                has_many :replies
                validates_presence_of :title, :tekst
                validates :tekst, length: {minimum: 10}
              end

              class User < ActiveRecord::Base
                devise :database_authenticatable, :registerable,
                :recoverable, :rememberable, :trackable, :validatable

                has_many :posts, dependent: :destroy
                has_many :replies

               end

            class Reply < ActiveRecord::Base
              belongs_to :post
              belongs_to :user
              validates_presence_of :user, :post, :comment
              validates :comment, length: {minimum: 10} 

             end

控制器:

代码语言:javascript
复制
       class RepliesController < ApplicationController
   before_action :set_post, only: [:new, :index, :create]
   before_filter :authenticate_user!
  def index
    @replies = @post.replies
  end

  def new
    @reply = Reply.new
  end

  def create
    @reply = current_user.replies.create(reply_params)

    respond_to do |format|
      if @reply.save
        format.html { redirect_to @post, notice: 'Reply was 
        successfully saved' }
        format.json { render json: @post }
      else
        format.html { render :new }
        format.json { render json: @post.errors, status: 'Wrong entry' 
        }
    end
    end
  end

  private

  def reply_params
    params.require(:reply).permit(:comment, :post_id)
  end

  def set_post
    @post = Post.find(params[:post_id])
  end
end

表格:

代码语言:javascript
复制
<%= form_for [@post, @reply] do |f| %>
  <%= f.text_field :comment %>
  <% f.hidden_field :post_id, value: @post.id  %>
  <%= f.submit %>
<% end %>

模式:

代码语言:javascript
复制
  create_table "replies", force: :cascade do |t|
    t.integer  "post_id"
    t.integer  "user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.text     "comment"
  end

  add_index "replies", ["post_id"], name: "index_replies_on_post_id"
  add_index "replies", ["user_id"], name: "index_replies_on_user_id"

以及它对输出的看法:

代码语言:javascript
复制
Parameters: {"utf8"=>"✓", "authenticity_token"=>"lot of nubers",
"reply"=>{"comment"=>"sdfsddasd"}, "commit"=>"Create Reply", 
"post_id"=>"1"}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-14 07:43:36

它失败了,因为您没有将帖子与回复相关联。试试这个。

代码语言:javascript
复制
def create
  @reply = @post.replies.new(reply_params)
  @reply.user = current_user

  respond_to do |format|
    if @reply.save
    ...
  end
end

另外,请注意您应该实例化回复(使用new,而不是create),然后保存它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51831811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档