2011-07-31 44 views
0

Rails noob誰研究了幾個星期,並嘗試各種方式來做到這一點。 我目前正在嘗試從編輯視圖建立關聯。我放棄了試圖從新視圖(首選)來構建它,因爲所討論的對象還沒有被創建。我現在甚至使用Formtastic,因爲我聽說它「處理更好的關聯」問題建設has_many:通過關聯 - 認爲我很接近

在我的問題中,我說我很接近,因爲我能夠手動創建關聯 - 通過設置加入一個控制器定義的對象,而不是用戶通過表單選擇的對象。請求參數正在傳遞,我似乎無法正確訪問它們。

型號:

class Bar < ActiveRecord::Base 

    has_many :teams, :through => :bars_teams 
    has_many :bars_teams, :dependent => :destroy 

    accepts_nested_attributes_for :bars_teams 

class Team < ActiveRecord::Base 

    has_many :bars, :through => :bars_teams 
    has_many :bars_teams, :dependent => :destroy 

class BarsTeam < ActiveRecord::Base 

    belongs_to :bar 
    belongs_to :team 

酒吧控制器:

def edit 
    @bar = Bar.find(params[:id]) 
    @teams = Team.all 
    @bars_team = @bar.bars_teams.build 
    @title = "Edit bar" 
    end 

    def update 
    @bar = Bar.find(params[:id]) 
    @team = @bars_team.team_id 
    @bar.follow_team!(@team) 
    if @bar.update_attributes(params[:bar]) 
     flash[:success] = "Bar updated." 
     redirect_to @bar 
    else 
     @title = "Edit bar" 
     render 'edit' 
    end 
    end 

由棒模型 - follow_team!:

def follow_team!(team) 
    bars_teams.create!(:team_id => team.id) 
    end 

WHY我想我CLOSE(從更新線以上是錯誤的)

@team = @bars_team.team_id 

我可以手動設置該行,例如@team = Team.find(49)。成功創建了該欄到#49隊的關聯。我只是似乎無法抓住從形式......它的方式,這裏是形式的團隊:

編輯表單:

<%= semantic_form_for (@bar) do |form| %> 
    <%= form.inputs :address, :city, :state, :zip_code, :phone_number, :website %> 
    <%= form.semantic_fields_for @bars_team do |team| %> 
     <%= team.input :team, :as => :select, :collection => @teams, :include_blank => false %> 
     <%= team.input :bar_id, :as => :hidden %> 
    <% end %> 
    <%= form.buttons %> 
<% end %> 

如果有人有興趣,這裏是請求參數,顯示出信息被獲得通過,但我仍然不知道如何正確地訪問團隊:

{"utf8"=>"✓", 
"_method"=>"put", 
"authenticity_token"=>"ECOBrnXsgMA5k2XKIiaZ7iguaIlUtj3pSHREZ683HKw=", 
"bar"=>{"address"=>"", 
"city"=>"", 
"state"=>"", 
"zip_code"=>"", 
"phone_number"=>"", 
"website"=>"", 
"bars_team"=>{"team_id"=>"20", 
"bar_id"=>"46"}}, 
"commit"=>"Update Bar", 
"id"=>"46"} 

超級長話短說,我該如何從形式訪問團隊設置的關聯?

對任何能夠幫助解決我原來無法從新視圖創建關聯的問題的人員的獎勵。基本上創建一個新酒吧,並在創建時立即爲其分配一個團隊。

回答

0

嘗試改變

@team = @bars_team.team_id 

@team = Team.find(params[:bar][:bars_team][:team_id]) 

整個安排是不必要的複雜,但。

+0

這對問題的工作。然而,我會更徹底地研究這兩個答案 - 包括這個關於複雜性的答案,以及@jimworms迴應甚至不需要按照我設定的方式去做。我希望,隨着我學到更多,我將能夠提前確定這些事情。感謝您的回覆! –

0

這不是使用fields_foraccepts_nested_attributes_for的情況。嘗試擺脫所有@bars_team東西,只是這樣做在你的表格:

<%= form.input :teams, :as => :check_boxes, :collection => @teams %> 

注意:我從來沒有用過formtastic自己,但是這是我閱讀文檔後得到。

+0

謝謝你的迴應,我會嘗試這樣的解決方案 - 儘管其他答案適用於我的「竣工」需求。重建將是我的第二要務,並可能包括這方面的一些內容。謝謝! –

相關問題