2013-05-31 4 views
0

Я реализую родословную на вложенном ресурсе.Реализация родословной на вложенном ресурсе, бросающем ошибку

resources :loads do 
    resources :messages 
end 

Вот мой индекс действия

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

Мой index.html.erb бросает следующее сообщение об ошибке.

Недостающие частичные сообщения/сообщения с {: локаль => [: EN] : форматы => [: HTML]: Обработчики => [: Еврорадио,: строитель,: кофе]}. Искал в: * "C:/Сайты/FINAL/облака/приложение/просмотров"

Мой index.html.erb как следовать

<% title "Messages" %> 

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

<%= render "form" %> 

Вот мое определение nested_message

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 и проверьте, есть ли у вас это частичное. Судя по вашим вложенным ресурсам Я предполагаю, что ассоциацию между Load и Message является:

class Load < ActiveRecord::Base 
    has_many :messages 
end 

class Message < ActiveRecord::Base 
    belongs_to :load 
end 

Более того, я заметил, что у вас есть следующая строка в вашем index действия: @message = load.messages.new, конечно, это не кажется правильным. Поскольку ваше заявление о том, что ваше приложение должно делать, - это когда контроллер получает ответ для визуализации действия 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 

И сделает `приложение/просмотров/пользователей/new.html.erb, которые в этом, скорее всего, иметь

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

Это будет позвоните своему частному лицу, которое в обычных случаях будет _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 

Здесь внутри create действия, когда ваш _form.html.erb или _message.html.erb представляются, он будет пытаться создать новый пользователь, передавая пользователь через params.Я полностью верю, что ваша проблема может потенциально оказаться:

1) Ваш отсутствующий ваш _message.html.erb

2) Кроме того, вы вызываете .new внутри вашего index действия.

Надеюсь, это прояснит это для вас.

+0

Привет, Дэвид. Спасибо за подробный ответ. У меня есть модель _message.html.erb в моей модели. Я редактирую свой пост, чтобы включить это. Я также пробовал комментировать внешнее действие .new внутри индекса, но я получаю ту же ошибку – user2297820

+0

@ user2297820 еще одна вещь, которую я только заметил в представленных фрагментах кода. Я не вижу, где вы вызываете сообщение '<% = render" %> 'также вы могли бы альтернативно попробовать добавить расширение явно в' <% = render: partial => "messages/_message.html.erb" '. Вы заметите, что внутри вашего 'index.html.erb' вы вызываете' <% = render 'форму «%>' Я считаю, что вы хотите «<% = визуализировать» сообщение «%>», если я стою правильно – David

+0

Спасибо за все обратная связь. Действительно ценю это. Он работает сейчас. У меня были частичные имена как _messages.html.erb вместо _message.html.erb. Еще раз очень ценю вашу помощь. – user2297820