Reputation: 867
I try to displaying Validation Errors in the View for create new article page. I have validation in article model for check body and title presence ( validates :title, :body, :presence => true). It did not allow to create new article when I keep article and title text box but showing "Template is missing" error with below info.
Missing template articles/create, application/create with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in: * "F:/kuta/billi/app/views" * "C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/twitter-bootstrap-rails-2.2.6/app/views" * "C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/devise-2.2.3/app/views"
I have put <%= f.error_messages %> in partial for new page of article and put gem 'dynamic_form' in gemfile.
_form.html.erb for article/new.html.erb
<%= form_for @article, :html => { :class => '' } do |f| %>
<%= f.error_messages %>
<div>
<%= f.label :title, :style => "margin-top:10px;" %>
<div>
<%= f.text_field :title, :style => "width:730px; height:30px; border: 1px solid #66c9ee;margin-top:10px; background-color:#FFFFFF;" %>
</div>
</div>
<div>
<%= f.label :body, :class => 'control-label' %>
<%= f.text_area :body, :style => "width:730px; height:250px; border: 1px solid #66c9ee;margin-top:10px; background-color:#FFFFFF;" %>
<%= f.label :tag_list, :style => "margin-top:10px" %><br />
<%= f.text_field :tag_list, :style => "width:730px; height:30px; border: 1px solid #66c9ee;margin-top:0px; background-color:#FFFFFF;" %>
<div style="margin-top: 20px">
<%= f.submit nil, :class => 'btn btn-primary' %>
<%= link_to t('.cancel', :default => t("helpers.links.cancel")),
articles_path, :class => 'btn' %>
</div>
<% end %>
article.rb model
class Article < ActiveRecord::Base
attr_accessible :title, :body
attr_accessible :tag_list
has_many :comments
belongs_to :user
has_many :taggings
has_many :tags, through: :taggings
validates :title, :body, :presence => true
def tag_list
self.tags.collect do |tag|
tag.name
end.join(", ")
end
def tag_list=(tags_string)
tag_names = tags_string.split(",").collect{|s| s.strip.downcase}.uniq
new_or_found_tags = tag_names.collect { |name| Tag.find_or_create_by_name(name) }
self.tags = new_or_found_tags
end
end
Could you please help me , where I am wrong.
Upvotes: 0
Views: 2316
Reputation: 6088
When validations fail, in your controller action you should render the new template again with render 'new'
instead of render 'create'
Upvotes: 6