2013-06-18 44 views
0

我正在嘗試爲我的rails站點創建一個「最喜歡的」按鈕。我有兩種模型,用戶和材料。我也做了以下內容:如何在rails 3.2中創建收藏夾關係

一)我創建了一個新表「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)我在材料展示頁面上創建了一個表單,該表單應該執行代碼來在數據庫中創建新的關係。這似乎有問題。該代碼是這樣的:

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 

不用說,這是行不通的:

<%= 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創建的方法。任何想法我應該做什麼?我最大的困惑之處是我應該創建一個新的偏好對象以及如何創建。

+0

什麼部分不起作用?錯誤信息?路由問題? – davidfurber

+0

你可以使用[社會化](https://github.com/Shreshtt/socialization)寶石。它提供了許多功能。您可以使用其Like功能作爲最愛。 – SoftwareGeek

+0

嗯實際上你正在使用find方法並保存記錄。您需要使用.new方法來啓動記錄,傳遞params記錄,然後使用.save方法記錄保存記錄。 – bunty

回答

3

您的創建函數試圖使用在創建操作中不應該存在的參數: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 
+0

感謝Matt,這太好了。快速補充問題:爲什麼我不需要在條件語句之前編碼@ favmat.save? – Finnjon