1

我有一個籃球應用程序,其中一個名單有很多玩家,而一個玩家可以在多個名單上(多到多的原因是一個Player-名冊檔案)Rails 3.1+嵌套表單問題:無法批量分配受保護的屬性

Roster.rb

class Roster < ActiveRecord::Base 
     belongs_to :team 
     has_many :rosterizes 
     has_many :players, :through => :rosterizes 
     accepts_nested_attributes_for :players 
     attr_accessible :jersey_number, :team_id, :class_year, :players 
    end 

Rosterizes.rb(命名不佳,我知道...)

class Rosterize < ActiveRecord::Base 
    belongs_to :player 
    belongs_to :roster 
    attr_accessible :player_id, :roster_id 
end 

Player.rb

class Player < ActiveRecord::Base 
    has_many :rosterizes 
    has_many :rosters, :through => :rosterizes 
    validates_presence_of :first_name, :last_name 
    attr_accessible :first_name, :last_name, :active 
end 

<div class="well"> 
    <h2>New Player</h2> 
    <%= simple_form_for @roster, :url =>player_added_team_path, :html => { :class => 'form-horizontal' } do |f| %> 
     <%= f.simple_fields_for @new_player do |x| %> 
      <%= x.input :first_name %> 
      <%= x.input :last_name %> 
     <%end%> 
     <%=f.input :class_year %>  
     <%=f.input :jersey_number %> 
     <%=f.input :team_id, :as => :hidden, :input_html => {:value => params[:id]}%> 

     <div class="well"> 
     <%= f.button :submit, :class => 'btn-primary icon-plus-sign btn-success', :value => "Add To Team" %> 
     </div> 
    <%end%> 
</div> 

我發送到控制器PARAMATERS:

"roster"=>{"player"=>{"first_name"=>"first name", "last_name"=>"last name"}, "class_year"=>"freshman", "jersey_number"=>"23", "team_id"=>"1"}, "commit"=>"Add To Team", "id"=>"1"} 

控制器,它處理保存:

def player_added 
    @team = Team.find(params[:id]) 

    #where the issue is happening 
    @roster = @team.rosters.build(params[:roster]) 
    @roster.save 
    ... 

end 

我身邊有使用參數,使用工作,我想了解我在做什麼錯在這裏爲今後/學習的目的,爲什麼它給我:不能質量 - 指定保護屬性

我周圍的工作(有點哈克):

def player_added 

    @team = Team.find(params[:id]) 
    @roster = @team.rosters.build(:class_year => params[:roster][:class_year], :jersey_number => params[:roster][:jersey_number]) 
    @new_player = @roster.players.build(:first_name => params[:roster][:player][:first_name], :last_name => params[:roster][:player][:last_name]) 

    @roster.save 
    @new_player.save 

    ... 

end 

我使用Simple_Form 2.0 ...

我知道這是很多的信息,但是提前謝謝你!

SOLUTION

只是櫃面其他人是否有相同的我是相同/相似的問題...

我=>https://github.com/ryanb/nested_form

安裝此插件所以這是我的變化製作:

名冊。RB

class Roster < ActiveRecord::Base 
    belongs_to :team 
    has_many :rosterizes 
    has_many :players, :through => :rosterizes 
    accepts_nested_attributes_for :players 
    attr_accessible :jersey_number, :class_year, :players, :player_attributes 
end 

我也作了變化視圖,以:

<%= simple_nested_form_for @roster, :url =>player_added_team_path, :html => { :class => 'form-horizontal' } do |f| %> 
     <%= f.simple_fields_for :players, @roster.players.build do |x| %> 
      # nested form 
      ... 
     <%end%> 
     # form 
     ... 
<%end%> 

控制器保存 DEF player_added

@team = Team.find(params[:id]) 
@roster = @team.rosters.build(params[:roster]) 
@roster.save 

... 

這是一種痛苦在對接fo讓我明白,希望這會減少你尋找答案/學習nested_forms的時間!

+0

'accep_nested_attributes_for:players' – DGM 2012-04-20 03:57:34

回答

3

問題是與你命名你的嵌套的關聯屬性的辦法,並與參數您發送:

嵌套:players的屬性應爲:players_attributes:team_id,也不應列入(因爲它覆蓋小組關聯導軌魔術):

attr_accessible :jersey_number, :class_year, :players_attributes 

而且參數應該有這樣的格式:

"roster"=>{"players_attributes"=>[{"first_name"=>"first name", "last_name"=>"last name"}], "class_year"=>"freshman", "jersey_number"=>"23"}, "commit"=>"Add To Team", "id"=>"1"} 

要做到這一點,你應該改變simple_form_for @rostersimple_nested_form_for @roster

請注意,您不需要包含的參數"team_id"屬性爲"roster",因爲你已經裝載和名冊關聯到它。

+0

我做了更改,但現在出現新錯誤,請查看我的編輯。對不起,如果我的問題/問題是天真的,我對rails的使用經驗是初學者適中,第一次使用嵌套形式。感謝您的意見和幫助! – mrcolombo 2012-04-20 03:53:27

+0

accep_nested_attributes_for:玩家應該保持不變,只有attr_accessible部分需要更改 – PinnyM 2012-04-20 03:58:05

+0

作出更改,doest似乎認識到'simple_nested_from_for'調用http://i.stack.imgur.com/hU7Dx.png,也解決了我的編輯問題高於你原來的意思。 – mrcolombo 2012-04-20 04:13:26

相關問題