Hi all,
I get stucked with the following scenario. I have a simple application
where I have a post which can have a lot of comments. In the show action
of the post I loaded the partial form to create the comment. This is
also working. My problem is when the validation for the comment fails I
don’t know how to set the render method in the create action of the
comments controller to get back to the current post show view and also
to display the form errors. I can do a redirect back to the current post
but then I will miss all the form data and see also no errors. Hope
someone can give me a hint how to solve this.
Here are my models:
class Post < ActiveRecord::Base
extend FriendlyId
friendly_id :title, use: :slugged
attr_accessible :title, :body
attr_accessible :title, :teaser, :content, :category_id, :picture
#paperclip settings
has_attached_file :picture, :styles => { :medium => “300x225>”, :small
=> “180x115>”, :thumb => “150x150>” }
#association
belongs_to :category
has_many :comments
end
class Comment < ActiveRecord::Base
attr_accessible :content, :email, :name, :website
validates :content, :email, :name, :website, :presence => {:message =>
“Darf nicht leer sein!”}
belongs_to :post
end
My routes are set like this:
resources :posts do
resources :comments
end
Show view post:
…
Comments
show here partial with comments
<h2 class="new">New Comment</h2>
<%= render "comments/form" %>
</div>
Comments Form Partial:
<%= form_for([@post,@post.comments.build]) do |f| %>
<% if @post.comments.build.errors.any? %>
<%= @post.comments.build.errors.count %> Error while
saving form:
- <%= msg %>
<% @post.comments.build.errors.full_messages.each do |msg|
%>
<% end %>
<% end %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :email %>
<%= f.text_field :email %>
<p>
<%= f.label :website%><br/>
<%= f.text_field :website %><br/>
</p>
<p>
<%= f.label :content %><br/>
<%= f.text_area :content %><br/>
</p>
<%= f.submit "Save" %>
<% end %>
create action in comments controller
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.build(params[:comment])
respond_to do |format|
if @comment.save
format.html { redirect_to(post_path(@post), :notice => “Comment
successfully created”) }
else
flash[:alert] = “Something went wrong!”
format.html { render ??? }
end
end
end
Thanks for any help with this.
Cheers Greg