我正在尝试构建一个 form_for 来创建其他两个模型之间的连接模型。我有一个 Book 模型和一个 User 模型,另一个叫做 Reads 是我的加入。这是我设置关联的方式:
class User < ActiveRecord::Base
has_many :reads
has_many :books, :through => :reads
end
class Book < ActiveRecord::Base
has_many :reads
has_many :users, :through => :reads
end
class Read < ActiveRecord::Base
belongs_to :book
belongs_to :user
end
我查看了 form_for 的文档并观看了关于多对多关联的 railscast 剧集,但我无法弄清楚为什么在我尝试渲染 Book#show 视图时出现错误把表格:
First argument in form cannot contain nil or be empty
这是我在 app/views/books/show.html.erb 中的表单:
<%= form_for(@read) do |f| %>
<%= f.hidden_field :book_id, value: @book.id %>
<%= button_to 'Add to Reads', {controller: 'reads', action: 'create'}, {class: 'btn'} %>
<% end %>
我认为部分问题是我试图从 Books 模型创建一个“读取”对象,但我不确定我做错了什么。我需要图书页面上的“添加到阅读”按钮,以便用户可以选择该特定图书以添加到他们的“阅读”中。我还在控制器中添加 current_user id,而不是在视图中。如果有帮助,这是我从读取控制器创建的操作...
def create
@read = Read.new(read_params)
@read.user_id = current_user.id
@read.save
if @read.save
# do this
else
# do that
end
end
而且我正在使用强大的参数...
def read_params
params.require(:read).permit(:user_id, :book_id)
end
谢谢你的帮助。