2013-03-22 3 views
0

У меня есть две модели с соответствующими контроллерами и видами: Profile и Comment.Отображение данных из двух моделей в одном виде

Весь вид (вся веб-страница) моей заявки находится в Profileshow.html.erb. На этой странице пользователь должен иметь возможность создать комментарий, который belongs_to a Profile.

Как это можно сделать без перехода к стандартной странице /comments/new?

Edit: После выполнения направляющих рельсов, я реализовал:

<%= simple_form_for([@profile, @profile.comment.build], html: {class: "form-inline"}) do |f| %> 
    <%= f.error_notification %> 

    <%= f.input :description, label: false, placeholder: 'Create an comment', input_html: { class: "span4" } %> 
    <%= f.submit 'Submit', class: 'btn btn-small'%> 

<% end %> 

CommentController

def create 
    @profile = profile.find(params[:profile_id]) 
    @comment = @profile.comments.create(params[:comment]) 
    redirect_to profile_path(@profile) 

И я получаю эту ошибку:

undefined method `comment' for #<Profile: 

Fixed : В заявлении сборки, комментарии должны были быть во множественном числе

@profile.comments.build 
+1

Посмотрите на это: http://guides.rubyonrails.org/getting_started.html#generating-a-controller – siekfried

+0

Пожалуйста, см. Выше ошибку – mnort9

+0

Вы забыли 's' на комментарий в своем объявлении формы:' <% = simple_form_for ([@ profile, @ profile.comments.build] ' – siekfried

ответ

1

Все, что вам нужно сделать, это добавить комментарий код формы в профиле # шоу. Тогда в шоу действия profile_controller сделать что-то вроде:

def show 
@comment = Comment.new 
end 

И в комментарии контроллера добавить:

def create 
@comment = Comment.create(params[:comment]) 
end 
+0

Я считаю, что первый метод, который вы хотели сказать, был в новом действии вместо действия show. – GKnight

0

Вы могли бы рассмотреть сохранение формы и обновления страницы с помощью AJAX вызовов и, возможно, что-то вроде Knockout , Поэтому в профилях/show.html.erb создайте обычную (отдельную) форму для размещения комментариев. Используйте jQuery или что-то в этом роде, чтобы отправить форму через AJAX в/comments, так что это действие создается в вашем контроллере комментариев. Попросите этого контроллера вернуть ответ JSON, который будет либо сохраненным комментарием, либо хешем сообщений об ошибках, который выглядит примерно так: {: fieldname => 'too long'}.

На клиенте проанализируйте ответ json и либо отобразите сохраненный комментарий, либо отобразите сообщение об ошибке, объясняющее, почему его не удалось сохранить. Вы можете сделать все это в простом jQuery, но добавление чего-то вроде Knockout сделает все немного проще.

Смежные вопросы