2013-09-05 2 views
1

내 앱에는 두 가지 모델이 있습니다. 하나는 회의라고하고 다른 하나는 결과입니다. 나는 각 회의 결과를 @outcome=current_meeting.outcome.build(params[:outcome])을 사용하여 만들고 싶었다. 또한 각 회의에는 하나의 결과 만 있으므로 분명히 has_one 관계입니다. 나는 current_meeting을 얻는 것에 대해 정말로 혼란 스럽다. 나뿐만 회의 및 결과 모델이 있습니다레일에있는 has_one 관계의 현재 ID에 액세스

회의를 모델

나는 새로운 결과는 회의의 쇼 내부에 존재하는 것으로 원하는 결과 모델

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

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 

, 만약 존재하지 않고 현재가 존재한다면 새로운 결과를 창출 할 수 없다.

회의/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을 찾는 방법을 모르겠습니다. 도와주세요.

답변

1

우선, 복수는 outcomeoutcomes에 대해 매우 혼란 스럽습니다. Meeting has_one Results가있는 경우 참조를 언급 할 때 단수 형태를 사용합니다. 기본적으로 has_one :outcome이 주어지면 ": outcome"은 사용할 메소드 이름입니다. 따라서 meeting.outcomes 대신 meeting.outcome이라고 말하면됩니다. has_one의 빌드 방법은 meeting.outcomes.build 대신 meeting.build_outcome과 같습니다. 후자는 has_many 관계의 API입니다.

Outcomes 컨트롤러에서 현재 회의를 가져 오는 중 방해가되는 경우 중첩 된 리소스를 사용하는 것이 가장 좋습니다. 따라서 경로 파일에는 다음과 같은 경로가 있습니다.:

resources :meetings do 
    resources :outcomes 
end 

그런 다음 rake routes을 실행하여 사용 가능한 경로를 확인하십시오. 여기에 URL 형식 인 POST /meetings/:id/outcomes이 표시됩니다. 따라서이 경우 create 메서드는 결과 개체를 만들 수있는 params[:id]에서 Meeting 개체를 가져옵니다.

+0

감사합니다. 그것은 정말로 많은 도움이되었습니다. – sushilthe

0

어디서나 current_meeting을 정의하는 것처럼 보이지 않습니다. 당신은 이미 이것을 알고있을 것입니다. 그렇다면 당신은 그것을 정의하는 방법과 위치를 확신 할 수 없을 것입니다. 코드의 어딘가에서 그렇게해야 할 것입니다. 이것은 현재 회의 및/또는 오늘 회의이기 때문에이 회의와 같은 것이 현재라고 말하는 것을 의미 할 수 있습니다. 이것은 앱이이 논리를 결정하는 방법에 기반합니다.

컨트롤러 나 도우미에 현재 미팅이있는 경우 미팅을 제공하는 방법을 작성해야합니다. 거기에서 컨트롤러의 current_meeting 변수가 올바르게 설정되고 다른 방법을 올바르게 호출해야합니다.

문제를 오해 한 경우 사과 할 수있는 다른 세부 정보를 제공해주십시오. 도움을 요청할 수 있습니다.

관련 문제