1

我的应用程序中有两个模型。一个叫会议,另一个叫结果。我想使用以下方法创建每次会议的结果:@outcome=current_meeting.outcome.build(params[:outcome]). 此外,每次会议只有一个结果,因此显然是一种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。如果会议 has_one 结果,那么您在引用参考文献时将使用单数形式。基本上,给定has_one :outcome的 ":outcome" 是要使用的方法名称。所以你会说meeting.outcome而不是meeting.outcomes. has_one的构建方法将类似于meeting.build_outcome而不是meeting.outcomes.build. 后者是has_many关系的 api。

除此之外,如果您想从结果控制器中获取当前会议,最好的方法是使用嵌套资源。因此,在您拥有的路线文件中,例如:

resources :meetings do
  resources :outcomes
end

完成此操作后,运行rake routes以查看可供您使用的路线。在那里,您将看到POST /meetings/:id/outcomes您将在此处使用的预期 url 格式。因此,在这种情况下,该create方法将从 中获取 Meeting 对象params[:id],从中可以创建结果关系。

于 2013-09-05T18:25:32.370 回答
0

乍一看,您似乎没有在任何地方定义 current_meeting。您可能已经知道这一点,如果是这样,您不确定如何/在哪里定义它。您可能需要在代码中的某处执行此操作。这可能意味着说此会议是当前的,因为它是在当前时间和/或今天。这取决于您的应用程序如何确定此逻辑。

在您的控制器或助手中,您将需要编写一个方法来为您提供当前会议(如果存在)。从那里,您的控制器中的 current_meeting 变量将被正确设置,并且应该正确调用您的其他方法。

如果我误解了这个问题,我深表歉意,并请提供您可以提供的任何其他详细信息,我会尽力提供帮助。

于 2013-09-05T18:23:37.090 回答