我正在尝试为我的rails网站创建一个“最喜欢的”按钮。我有两个模型,用户和材料。我做了以下事情:
a)我创建了一个新表“favmats”,它在模式中看起来像这样:
create_table "favmats", :force => true do |t|
t.integer "user_id"
t.integer "material_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
b)我在模型之间建立了关系:
class Favmat
belongs_to :user
belongs_to :material
end
class Materials
has_many :favmats
has_many :users, :through => :favmats
end
class Users
has_many :favmats
has_many :materials, :through => :favmats
end
c)我在材质展示页面上创建了一个表单,该表单应该执行代码以在数据库中创建新关系。这似乎有问题。因此代码是:
<%= form_for @favmat do |f| %>
<%= f.hidden_field :user_id, value: @user.id %>
<%= f.hidden_field :material_id, value: @material.id %>
<%= f.submit "Favourite" %>
<% end %>
d)我在favmats_controller中创建了一个如下所示的方法:
def create
@material = Material.find(params[:id])
respond_to do |format|
if @favmat.save
format.html { redirect_to @material }
format.js
else
format.html { render 'new' }
format.js
end
end
end
毋庸置疑,这不起作用。任何想法我应该做什么?我最大的困惑之处在于我应该在哪里创建一个新的favmats对象以及如何。
答案 0 :(得分:3)
您的create函数正在尝试使用:id
参数,该参数在创建操作中不应存在。
它也没有构建一个favmat对象,只是试图保存一些不存在的东西。
def create
@favmat = Favmat.new(params[:favmat])
respond_to do |format|
if @favmat.save
format.html { redirect_to @favmat.material }
format.js
else
format.html { render 'new' }
format.js
end
end
end