0

我正在尝试为我的 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 对象以及如何创建。

4

1 回答 1

3

您的 create 函数正在尝试使用:id在 create 操作中不应该存在的参数。它也不会构建一个 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
于 2013-06-18T12:42:38.383 回答