渲染错误消息不仅仅在一个页面上工作

时间:2016-03-22 02:12:57

标签: ruby-on-rails ruby ruby-on-rails-4 railstutorial.org

我无法在此页面上显示错误消息。它们适用于任何其他页面,但不适用于此页面

mod_approval.index.html.erb

<%  @check_category.each do |category| %>

 <%= form_for([@guide, Guide.friendly.find(@guide.id).categories.new], url: guide_mod_panel_approve_category_path, method: :post) do |f| %>
       <%= render 'shared/error_messages', object: f.object %>
       <%= hidden_field_tag :check_id, category.id %>
       <%= f.hidden_field :name, :value => category.name %>
       <%= f.submit "Approve"  %>
 <% end %>
<% end %>

mod_approval_controller

def mod_add_category

    @guide          = Guide.friendly.find(params[:guide_id])
    @check_category = CheckCategory.where(guide_id: @guide.id).all
    @category       = Guide.friendly.find(@guide.id).categories.new(category_params)

      if @category.save 

     flash[:success] = "Game category added succesfully!"
     redirect_to guide_mod_panel_mod_approval_index_path(@guide)
  else
     render 'mod_approval/index'
  end

end

路由

match '/guides/:guide_id/mod-panel/approve/category' => 'mod_approval#mod_add_category', :via => :post, as: :guide_mod_panel_approve_category
match '/guides/:guide_id/mod-panel/approve' => 'mod_approval#index', :via => :get, as: :guide_mod_panel_mod_approval_index

不太确定为什么他们没有渲染我尝试将<%= render 'shared/error_messages', object: f.object %>更改为<%= render partial: 'shared/error_messages', object: f.object %>,但这会产生错误

undefined local variable or method `object' for #<#<Class:0x007ffdbcd1c3a8>:0x007ffdbcbdd320>

在此行<% if object.errors.any? %>

这个错误渲染设置是由Michael Hartls rails教程制作的,正如我所说,我对其他所有形式都可以正常工作但是这个。

1 个答案:

答案 0 :(得分:1)

原因是当您渲染表单时,您实例化一个新的类别:

form_for([@guide, Guide.friendly.find(@guide.id).categories.new],

您需要为form_for提供包含错误(您的控制器中为@category)的类别实例。所以我会改变你的形式:

form_for([@guide, @category],

然后在您的#new方法中确保进行设置:

@category = @guide.categories.build