В ответ на предыдущий вопрос я есть несколько проблем, которые нужно решить, прежде чем я смогу безопасно отображать и отправлять форму комментария в своем профиле. Я новичок в программировании, поэтому размышления о нескольких контроллерах, похоже, меня запутали.
Что я делаю, так это размещаю комментарии в форме, а затем перечисляю их.
Предыстория: _comment_form
и _comment
находятся как частичные части в Profile
about. (Моя следующая задача — переключиться с информации о профиле на другую, но это еще один вопрос вообще.)
Используя помощь, предоставленную в моем последнем вопросе, я чувствую, что почти у цели, но получаю сообщение об ошибке.
Миграция CreateComments:
t.integer :profile_id
t.integer :author_id
t.string :body
Модель моего комментария:
class Comment < ActiveRecord::Base
belongs_to :profile
belongs_to :author, :class_name =>"User", :foreign_key => "author_id"
end
КомментарииКонтроллер:
def create
@comment = Comment.new(params[:comment].merge(:author_id => current_user.id))
@comment.save!
redirect_to profile_path(@comment.profile)
end
Контроллер профилей:
def create
@profile = Profile.new(params[:profile])
if @profile.save
redirect_to profile_path(@profile), :notice => 'User successfully added.'
else
render :action => 'new'
end
end
def show
@user = User.find(params[:id])
@profile = @user.profile
@comment = @profile.comments.new
end
Партиалы комментариев внутри партиала профиля:
<div id="commentEntry">
<%= render :partial => 'comment', :collection => @profile.comments %>
</div>
<div id="newitem">
<%= render :partial => 'comment_form' %>
</div>
Маршруты.рб:
resources :users do
resources :profiles
end
resources :comments
_comment_form.html.erb:
<%= form_for @comment do |f| %>
<%= f.text_field :body %>
<%= f.submit 'Add new' %>
<% end %>
_comment.html.erb:
<li class="comment" title="<%= @comment.author.profile.first_name %> <%= @comment.author.profile.last_name %>">
<%= @comment.body %>
</li>
Итак, проблема №1: объединение _comment.html.erb
в цикле <% for @comment in @user.profile.comments %>
показывает профиль, но когда я пытаюсь отправить новый комментарий, я получаю сообщение "Неизвестное действие. Не удалось найти действие "обновить" для контроллера комментариев". Если я убираю цикл, профиль не отображается, и я получаю «NoMethodError in Profiles#show undefined method `profile' for nil: NilClass». Может ли кто-нибудь помочь мне и объяснить, что я делаю неправильно?
Проблема № 2. Я создал пример комментария в rails console
, и когда я получаю отображение профиля, поле ввода для комментария :body повторно заполняется телом комментария. Любые идеи о том, что может происходить?