2016-04-08 7 views
0

"Event"、 "Team"、 "User"の3つのモデルがあり、新しいEventオブジェクトを作成してteam_idに関連付けることができません。おそらく、私は関係で何かを見逃しています。私は新しいイベントフォームを作成し提出する際Ruby On Rails - アソシエーションによる新しいモデルオブジェクト

class User < ActiveRecord::Base 
    has_many :teams 
    has_many :events, through: :teams 
end 

class Team < ActiveRecord::Base 
    has_many :events 
    has_many :users 
end 

class Event < ActiveRecord::Base 
    belongs_to :team 
    has_many :users, through: :teams 
end 

class EventsController < ApplicationController 
    def new 
    @event = Event.new 
    end 

    def create 
    @event = current_team.events.build(event_params) 
    if @event.save 
     flash[:success] = "Event created!" 
     redirect_to @event 
    else 
     render 'new' 
    end 
    end 

class TeamsController < ApplicationController 
    def new 
    @team = Team.new 
    end 

    def create 
    @team = current_user.teams.build(team_params) 
    if @team.save 
     flash[:success] = "Team created!" 
     redirect_to @team 
    else 
     render 'new' 
    end 
    end 

エラーがイベントコントローラにトリガされcurrent_team.eventsが認識されないよう、次のように彼らは、定義されています。私はRoRに比較的新しいので、どんな助けでも大歓迎です!

答えて

0

私はついに何が起こっているのか把握しました。私はcurrent_userを定義するのと同じ方法でcurrent_teamを定義しようとしていましたが、current_userは現在のログインしているセッションの1人のユーザーです。

こうして、私は別のルートに行き、新しいイベントのためにフォームのlink_のteam_idパラメータを渡しました。これにより、フォームのhidden_​​fieldのteam_idを呼び出してDBに保存することができました。

方法は、この応答に非常によく説明されていますPass Parameters in Link_to

感謝を助け、すべてのために!

イベントコントローラ

リンク
class EventsController < ApplicationController 
def new 
    @event = Event.new(:team_id => params[:team_id]) 
end 

def create 
    @event = Event.new(event_params) 
    if @event.save 
     flash[:success] = "Event created!" 
     redirect_to @event 
    else 
     render 'new' 
    end 
end 

private 

    def event_params 
     params.require(:event).permit(:date, :name, :location, :venue, :team_id) 
    end 
end 

:CURRENT_USERは暗黙的にレールに定義されているため

<%= f.hidden_field :team_id %> 
0

あなたのコードからは、はあなたのEventsControllerに定義されていないようです。フォームからチームIDを取得した場合、次のようなことができます。

current_team = Team.find(params[:team_id]) 

これはうまくいくはずです。

+0

CURRENT_USERは、チームのコントローラで定義されることはありません形式で

<%= link_to "Create new event", newevent_path(:team_id => @team.id), class: "btn btn-md" %> 

隠しフィールドは、これです? – ncarroll

+0

これは通常、この機能をもたらすdevise gemですが、current_teamではなくcurrent_userになります! – born4new

0

ユーザーとチームの間に結合テーブルがありますか?その例から、これらの2つのモデルの間に多対多の関係がありますが、定義された関係は表示されません。もしそれが何

class Event < ActiveRecord::Base 
    has_many :teams 
    has_many :users, through: :teams 
end 

それでも私にはわからない:それはあなたがイベントモデルでは、次の

class Team < ActiveRecord::Base 
     belongs_to :event 
     belongs_to :user 
end 

を行う必要があり、テーブルに参加するよう、チームモデルでRails guides

+0

私はteam_user結合テーブルを持っています。現在、チームとユーザーを作成する際に問題はありません。 – ncarroll

0

をチェックあなたが本当に望むのは、もしチームテーブルがジョインテーブルであって、それを1つのように動作させたいなら、これはうまくいくはずですが、あなたの関係をもう一度チェックし、レールガイドをチェックしてここで何をしなければならないかを完全に理解することをお勧めします

+0

イベントが作成されたときにteam_idを渡して、チームによってイベントがインデックスに登録され、それぞれのチームページにイベントが表示されるようにしたいと思います。私はレールガイドを掘り続けるつもりです、ありがとう。 – ncarroll

+0

これは素晴らしいことですが、モデルの関連付けはうまくいくはずです。 イベントテーブルにチーム外部キーがあるかどうかを確認します。移行時に作成することができます – amrdruid

+0

外部キーはイベントテーブルにあります。この問題は、イベントコントローラのNoMethodErrorsであり、current_team.events.buildのteam_idまたはイベントを認識していないようです。 – ncarroll

関連する問題