3

我已經花了最近三天的時間了,我無法在任何地方找到答案。 我試圖學習Rails,並開始使用看起來相當簡單的應用程序。Rails 3 - 在創建新的HABTM協會時沒有更新連接表

我有2種型號:

class Album < ActiveRecord::Base 

    has_and_belongs_to_many :users 

    attr_accessible :title 

end 

class User < ActiveRecord::Base 

    has_and_belongs_to_many :albums 

    attr_accessible :first_name, :last_name 

end 

我還創建了連接表

create_table "albums_users", :id => false 
    t.integer "album_id" 
    t.integer "user_id" 

我的用戶/ show.html.erb文件包含一個形式

<%= form_for([@user, @user.albums.build]) do |f| %> 

當發送這種形式,它要求我的專輯#創建控制器

def create 
    @user = User.find(params[:user_id]) 
    @album = @user.albums.cre(params[:album]) 
    @album.save 
    end 

這將創建一個新專輯,但不建立在連接表中的條目。

當在參數看提交表單時哈希發送,我有

Parameters: {"utf8"=>"✓", "commit"=>"Create Album", "user_id"=>"1", "authenticity_token"=>"XNCPLYWQRzjpuQfjqbR7XuhMjr5iRzjLiqXpqZ4spFo=", "album"=>{"event"=>"title"=>"My Title"}} 

和SQL請求不從參數哈希使用USER_ID值

SQL(3.4ms )INSERT INTO 「專輯」( 「標題」, 「USER_ID」)VALUES(?,?)[ 「標題」, 「我的標題」],[ 「user_ID的」 零]

我嘗試添加一個隱藏的字段給我f ORM與USER_ID但後來我得到這個錯誤

Can't mass-assign protected attributes: user_id 

誰能給我解釋一下什麼是錯我的模型,我的聯想? 謝謝!

+0

你確定你想要使用HABTM?如果是這樣,你通常不會在HABTM關係中使用'accep_nested_attributes_for' ... – link664

+0

它看起來像你的相冊模型有一個user_id屬性。檢查你的schema.db文件,它應該在那裏嗎? – link664

+0

Has_many關係會更容易處理嗎?我的相冊模型中有一個user_id屬性。不應該在那裏? – mreysset

回答

4
  1. 使用複數的has_many關聯
  2. 構建專輯直接在用戶的相冊

    @album = @user.album.create(params[:album]) 
    
+0

好吧,使用複數的關聯解決了這個問題。 – mreysset

0

user_id不是params散列的album-subhash的一部分,因此在保存專輯時不會添加用戶。

一個簡單的解決辦法是這樣的:

def create 
    @user = User.find(params[:user_id]) 
    @album = @user.album.build(params[:album]) 
    @album.save 
end 
+0

user_id仍然不是專輯subhash的一部分參數:{「authenticity_token」=>「XNCPLYWQRzjpuQfjqbR7XuhMjr5iRzjLiqXpqZ4spFo =」,「commit」=>「創建專輯」,「專輯」=> {「」title「=>」我的標題「},」user_id「=>」1「,」utf8「=>」✓「}' – mreysset