2013-05-31 2 views
0

중첩 리소스에 조상을 구현하고 있습니다.중첩 된 리소스에 조상을 구현하여 오류가 발생했습니다.

resources :loads do 
    resources :messages 
end 

여기 내 index 액션

def index 
    load = Load.find(params[:load_id]) 
    @messages = load.messages.scoped 
    @message = load.messages.new 
end 

내 index.html.erb 다음과 같은 오류를 던지고있다.

누락 부분 메시지/메시지와 {로케일 => [: EN, : 형식 => [: HTML] : 핸들러 => [: ERB : 빌더 : 커피]}. * "C :/사이트/최종/클라우드/응용 프로그램/뷰"에서 검색

여기

<% title "Messages" %> 

<%= nested_messages @messages.arrange(:order => :created_at) %> 

<%= render "form" %> 

에 따라 내 nested_message 정의 그대로 내 index.html.erb은

module MessagesHelper 
    def nested_messages(messages) 
    messages.map do |message, sub_messages| 
    render(message) + content_tag(:div, nested_messages(sub_messages), :class => "nested_messages") 
    end.join.html_safe 
    end 
end 

여기 내 _message.html.erb입니다

<div class="message"> 
<div class="created_at"><%= message.created_at.strftime("%B %d, %Y") %></div> 
<div class="content"> 
<%= link_to message.content, message %> 
</div> 
<div class="actions"> 
<%= link_to "Reply", new_load_message_url(:parent_id => message) %> | 
<%= link_to "Destroy", [message.load, message], :confirm => "Are you sure?", :method => :delete %> 
</div> 
</div> 

어떤 도움을 주셔서 감사합니다.

답변

0

이 오류는 애플리케이션이 부분 _messages.html.erb를 검색하려고 시도했음을 나타냅니다.이 결과로 /app/views/messages에 나타나서는 안되는 메시지가 표시됩니다. messages 디렉토리를 점검하고이 부분이 있는지 확인하십시오. 내가 LoadMessage 사이에 연관성을 추측하고 당신의 중첩 된 자원이가는 것은 : @message = load.messages.new 반드시이 잘 보이지 않는다 :

class Load < ActiveRecord::Base 
    has_many :messages 
end 

class Message < ActiveRecord::Base 
    belongs_to :load 
end 

은 더욱 더 나는 당신이 당신의 index 행동에 다음 줄을 것으로 나타났습니다. 컨트롤러가 응답을 수신 할 때 컨트롤러가 index 액션을 렌더링 할 때 애플리케이션이 무엇을해야하는지 알기 때문에 @message = load.messages.new을 수행하여 메시지를 생성해야합니다. 이것이 부분을 렌더링하려고하는 이유입니다.

좀 더 명확하게하기. 응용 프로그램에 새 사용자를 만들려면 link_to이 있어야합니다. 새 사용자를 클릭하면이 같은 것을 할 것입니다 :

def new 
    @user = User.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @user } 
    end 
    end 

을 그리고`이 안에 대부분의 아마

<%= form_for @user do |f| %> 
    <%= render :partial => 'form', :locals => { :f => f } %> 
<% end %> 

이 의지를해야합니다 응용 프로그램/뷰/사용자/new.html.erb를 렌더링 정상적인 경우에는 _form.html.erb이 될 부분 전화하십시오. 특정 컨트롤러의 생성 동작은 부분을 저장하려고 할 때 작동합니다. 보통 컨트롤러의 create 블록은 다음과 같이 표시됩니다

def create 
    @title = "Create a user" 
    @user = User.new(params[:user]) 

    if @user.save 
     redirect_to usermanagement_path 
     flash[:success] = "Created successfully." 
    else 
     @title = "Create a user" 
     render 'new' 
    end 
    end 

을 여기 _form.html.erb 또는 _message.html.erb은 (는) params을 통해 사용자를 전달하여 새 사용자를 만들려고 할 것이다 제출 된 create 액션 내부.나는 철저하게 문제가 잠재적으로 잘 될 수 있음을 믿는다 :

1) 귀하는 또한 당신이 당신의 index 액션 내부 .new를 호출하여 _message.html.erb

2) 누락되었습니다.

희망 사항에 따라 삭제됩니다.

+0

안녕하세요. 자세한 답변을 주셔서 감사합니다. 내 모델에는 _message.html.erb가 있습니다. 나는 이것을 포함시키기 위해 내 게시물을 편집 중입니다. 또한 새로운 내부 색인 작업을 주석 처리하려고 시도했지만 동일한 오류가 발생했습니다. – user2297820

+0

@ user2297820 제공된 코드 조각에서 다른 점을 눈치 채 셨습니다. <% = render "message" %>'확장자를 명시 적으로 <% = render : partial => "messages/_message.html.erb"'에 추가해 볼 수도 있습니다. 'index.html.erb' 내부에서'<% = render "form"%>'내가''%% render "메시지"%>'를 원한다고 생각할 것입니다. – David

+0

감사합니다. 피드백 녀석. 정말 감사합니다. 지금 일하고있다. _message.html.erb 대신 _messages.html.erb로 부분 이름을 사용했습니다. 다시 한 번 귀하의 도움에 감사드립니다. – user2297820