2011-07-31 23 views
0

数週間研究し、これを行うためのあらゆる方法を試したRailsのnoob。 私は現在、編集ビューからアソシエーションを構築しようとしています。私は、問題のオブジェクトがまだ作成されていないため、新しいビュー(優先)から作成しようとしました。私は今、Formtasticを使用しています。私はそれが "より良い協会を扱う"と聞いたので、問題の建物has_many:through association - 私は近いと思う。

私の質問では、私は手作業で関連付けを作成することができるので、ユーザーがフォームを介して選択したオブジェクトではなく、コントローラ定義のオブジェクトと結合します。リクエストパラメータが渡されていますが、私はそれらに正しくアクセスできないようです。

モデル:

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 

バーモデルから - 私は更新からライン( CLOSEだと思うWHY!:

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

をfollow_team上記は間違っています)

@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 = Team.find(params[:bar][:bars_team][:team_id]) 

に配置全体がが不必要に複雑である

@team = @bars_team.team_id 

を変更してみてください。

+0

これは質問された質問に役立ちました。しかし、私は両方の答えをもっと徹底的に見ていきます - これは複雑さに関するものも含めて、そして私がそれを設定したやり方でさえも必要としないという@jimwormsの応答です。私がもっと学ぶように、私はこれらのことを前もって決められることを願っています。回答ありがとう! –

0

fields_forとを使用するのは当てはまりません。すべて@bars_teamのものを退治してみて、自分の形で次の操作を行います。

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

注意:私は自分自身formtastic使ったことがないが、これは、私は、ドキュメントを読んだ後、得たものです。

+0

この応答をありがとう、私はこのような解決策を試してみましょう - 他の答えが私の '構築された'ニーズのために働いていても。再構築は私の第二の優先事項であり、この行に沿ったものが含まれている可能性があります。ありがとう! –

関連する問題