1

アプリには 2 つのモデルがあります。1つは会議と呼ばれ、もう1つは結果です。以下を使用して、各会議の結果を作成したかったのです@outcome=current_meeting.outcome.build(params[:outcome])。さらに、各会議には 1 つの結果しかないため、明らかにhas_one関係があります。current_meeting の取得について本当に混乱しています。会議と結果のモデルは次のとおりです。

会議モデル

class Meeting < ActiveRecord::Base
  attr_accessible :info, :meeting_date, :name, :venue
  has_many :participants, :dependent => :destroy
  has_one :outcome, :dependent => :destroy
  validates_presence_of :name, :info, :meeting_date, :venue
end

結果モデル

class Outcome < ActiveRecord::Base
  attr_accessible :result
  belongs_to :meeting
  validates :meeting_id, presence: true
end

会議のショー内に新しい結果が存在することを望みます。存在しない場合、存在する場合、新しい結果を作成することは不可能にする必要があります

ミーティング/show.html.erb

<% if @meeting.outcomes.any? %>
   <%= render @outcomes %>
<% else %>
   <%= link_to "Add the outcome of meeting", new_outcome_path %>
<% end %>

私のコントローラーは次のとおりです。

会議管理者

def show
  @meeting = Meeting.find(params[:id])
  @outcomes = @meeting.outcomes.all
end

結果管理者

def new
  @outcome = current_meeting.microposts.new
end

def create
  @outcome = current_meeting.outcomes.build(params[:outcome])
  if @outcome.save
    flash[:success] = "Outcome created!"
    redirect_to root_url
  else
    render 'static_pages/home'
  end
end

current_meeting を見つける方法がわかりません。助けてください。

4

2 に答える 2

1

まず第一に、この質問はoutcomevsの複数に関して非常に紛らわしいoutcomesです。会議に結果が 1 つある場合、参照を参照するときに単数形を使用します。基本的にhas_one :outcome、「:outcome」は使用するメソッド名です。だからあなたはmeeting.outcomeの代わりに言うでしょうmeeting.outcomes。そして、has_onemeeting.build_outcomeのビルド メソッドは、代わりに のようになりmeeting.outcomes.buildます。後者はhas_many関係の API です。

これで、Outcomes コントローラーから現在の会議を取得したい場合、これを行う最善の方法は、入れ子になったリソースを使用することです。したがって、ルートファイルには次のようになります。

resources :meetings do
  resources :outcomes
end

それが終わったら、実行rake routesして利用可能なルートを確認してください。そこには、ここで使用する予想される URL 形式が表示されPOST /meetings/:id/outcomesます。したがって、この場合、createメソッドは から Meeting オブジェクトを取得しparams[:id]、そこから結果の関係を作成できます。

于 2013-09-05T18:25:32.370 に答える
0

一見、current_meeting を定義しているようには見えません。あなたはおそらくこれをすでに知っているでしょう。おそらく、コードのどこかでそれを行う必要があります。これは、現在の時刻および/または今日であるため、この会議が最新であるということを意味する場合があります。これは、アプリがこのロジックを決定する方法に基づいています。

コントローラーまたはヘルパーで、現在の会議が存在する場合はそれを提供するメソッドを記述する必要があります。そこから、コントローラーの current_meeting 変数が正しく設定され、他のメソッドを正しく呼び出す必要があります。

問題を誤解している場合は、お詫び申し上げます。他に詳細があればお知らせください。できる限りお手伝いさせていただきます。

于 2013-09-05T18:23:37.090 に答える