Salvar o objeto de comentários com relação com uma atualização de status .Build Ruby
-
26-09-2019 - |
Pergunta
Eu tenho uma atualização de status e comentar tabela DB.
Um usuário tem muitas atualizações de status e uma atualização de status tem muitos comentários. Semelhante ao Facebook, quando um amigo dos usuários vai para a página de feeds dos usuários (página de show), ele deve poder comentar as atualizações de status dos usuários.
Estou tendo problemas para salvar os usuários comentários de amigos. Meu código está abaixo. Acho que tem algo a ver com o controlador de comentários, crie método, "@comment = @statusupdate.comments.build (params [: comentário]) "
Qualquer orientação é muito apreciada! obrigado!
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
@statusupdates = @user.statusupdates.paginate(:page => params[:page], :per_page => 25)
@statusupdate = Statusupdate.new
@comment = Comment.new
end
end
show.html.erb
<% form_for @statusupdate do |f| %>
<%= f.error_messages %>
<div class="field">
<%= f.text_field :content %>
</div>
<% @statusupdates.each do |s| %>
<%= s.content %><br />
<% form_for @comment do |f| %>
<%= f.error_messages %>
<div class="field">
<%= f.text_field :comment %>
</div>
<div class="field">
<%= f.hidden_field :user_id, :value => current_user.id %>
</div>
<div class="actions">
<%= f.submit "Submit" %>
</div>
<br><br>
<% end %>
<% end %>
class CommentsController < ApplicationController
def create
@comment = @statusupdate.comments.build(params[:comment])
if @comment.save
flash[:success] = "Comment created!"
redirect_to root_path
else
@feed_items = []
render 'pages/home'
end
end
end
Solução 2
show.html.erb- Mudei a linha superior do formulário de comentário de atualização de status para:
<% form_for (s, s.comments.build) do |f| %>
...
class CommentsController < ApplicationController
def create
@statusupdate = statusupdate.find(params[:statusupdate_id])
@comment = @statusupdate.comments.create(params[:comment])
...
Eu não sei exatamente o que está acontecendo aqui, mas funcionou para mim ~ espero que ajude alguém ~
Outras dicas
Verifique o HTML do formulário para garantir que esteja certo. Veja também quais parâmetros estão sendo enviados para a ação Criar.
A principal coisa que vejo é que os formulários para a atualização de status e os comentários são aninhados, e ambos usam o parâmetro de bloco f. Isso pode fazer com que as coisas fiquem muito estranhas (especialmente porque o escopo dos parâmetros de bloco difere entre o Ruby 1.8 e 1.9). Parece também que você não quer os formulários aninhados. Você provavelmente também deve corrigir o recuo no seu HTML.