如何在rails 3.2中创建收藏夹关系

时间:2013-06-18 12:23:10

标签: ruby-on-rails ruby-on-rails-3 relationships favorites

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

1 个答案:

答案 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