嵌套关联和simple_form

时间:2016-06-18 02:27:57

标签: ruby-on-rails nested associations simple-form

正在完成此处的教程的最后一部分:https://www.youtube.com/watch?v=wOIQDO1yF80

使用Rails 4.2.6

任务是为图书评论应用创建评论系统。刚刚完成以下

创建了评论模型并添加了关联     belongs_to :book belongs_to :user

创建了一个嵌套路由 resources :books do resources :reviews end

创建了审核控制器 `class ReviewsController< ApplicationController的      before_action:find_book

def new
    @review = Review.new
end

def create
    @review = Review.new(review_params)
    @review.book_id = @book_id
    @review.user_id = current_user.id

    if @review.save
        redirect_to book_path(@book)
    else
        render 'new'
    end
end

private

    def review_params
        params.require(:review).permit(:rating, :comment)
    end

    def find_book
        @book = Book.find(params[:book_id])
    end

end`

创建了部分表单_form.html.erb

<%= simple_form_for([@book, @book.reviews.build]) do |f| %> <%= f.input :rating %> <%= f.input :comment %> <%= f.button :submit %> <% end %>

创建_partial视图以显示评论 <p><%= review.rating %></p> <p><%= review.comment %></p>

在我的图书<%= link_to "Add Review", new_book_review_path(@book) %>文件

中添加了我的评论“simple_form”show.html.erb的链接

添加了代码,用于在我的图书show.html.erb文件中呈现与图书相关的所有评论 <%= render @book.reviews %>

问题是当我从评论_form.html.erb提交评论时,book_id始终为null,因此它不会在书页上显示评论。这是我输入的最后一条记录的控制台输出。

Review Load (1.0ms) SELECT的评价.* FROM的评价ORDER BY的评价. ID为DESC LIMIT 1 => #<Review id: 13, rating: 4, comment: "Testing", created_at: "2016-06-18 02:10:23", updated_at: "2016-06-18 02:10:23", user_id: 1, book_id: nil> irb(main):007:0>

我没有收到任何错误消息。我可以手动将book_id输入数据库中的记录并正确显示,但问题是当我提交表单时传递了book_id inst。

我认为问题是两个方面之一。

评论_form.html.erb<%= simple_form_for([@book, @book.reviews.build]) do |f| %>

注意:当我提交评论时,user_id正确存储,看起来它们是在同一个地方定义的(在评论控制器内)

def create
    @review = Review.new(review_params)
    @review.book_id = @book_id
    @review.user_id = current_user.id

    if @review.save
        redirect_to book_path(@book)
    else
        render 'new'
    end
end

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

我明白了。愚蠢的错误,但让我永远想弄清楚。

在我有@review.book_id = @book_id的创建操作中,应该是@review.book_id = @book.id

感谢费拉斯的帮助。