【问题标题】:ActiveAdmin form error: "undefined method `new_record?'"ActiveAdmin 表单错误:“未定义的方法 `new_record?'”
【发布时间】:2011-10-14 18:38:05
【问题描述】:

我正在尝试为我的 Gallery 模型编写一个 ActiveAdmin 表单,该表单与我的 Image 模型具有 HABTM 关系。

请注意,这不是 this question 的副本,因为我已经在我的 Gallery 模型中使用了“accepts_nested_attributes_for”。

这是我抛出错误的图库表单:

<% @gallery.images.build %>
<%= semantic_form_for [:admin, @gallery] do |g| %>
  <%= g.inputs "Details" do %>
    <%= g.input :title %>
    <%= g.input :images, :as => :check_boxes, :label_method => Proc.new { |image| image_tag(image.thumb_path, :alt => "") + content_tag("h3", image.title)  } %>
  <% end %>
  <%= g.inputs :for => :images, :name => "New Image" do |image| %>
    <% if image.new_record? %>
      <%= image.input :title %>
      <%= image.input :asset, :as => :file %>
    <% end %>
  <% end %>
  <%= g.buttons %>
<% end %>

这是我的画廊模型:

class Gallery < ActiveRecord::Base
    belongs_to :admin_user
    has_and_belongs_to_many :images
    accepts_nested_attributes_for :images
end

这是我的图像模型:

class Image < ActiveRecord::Base
   belongs_to :admin_user   
   has_and_belongs_to_many :galleries

   has_attached_file :asset, :styles => {  
                                      :thumb => "96x96#"
                                      }

   validates_attachment_presence :asset
end

这是错误日志:

NoMethodError in Admin/galleries#edit

Showing /home/***/www/***/app/views/admin/galleries/_form.html.erb where line #8 raised:

undefined method `new_record?' for #<Formtastic::SemanticFormBuilder:0x164b2088>

Extracted source (around line #8):

5:       <%= g.input :images, :as => :check_boxes, :label_method => Proc.new { |image| image_tag(image.thumb_path, :alt => "") + content_tag("h3", image.title)  } %>
6:     <% end %>
7:     <%= g.inputs :for => :images, :name => "New Image" do |image| %>
8:       <% if image.new_record? %>
9:         <%= image.input :title %>
10:         <%= image.input :asset, :as => :file %>
11:       <% end %>

Trace of template inclusion: /home/bdastous/.rvm/gems/ruby-1.9.2-p290@rails31/gems/activeadmin-0.3.1/app/views/active_admin/resource/edit.html.arb

Rails.root: /home/bdastous/www/hotel_app_cms
Application Trace | Framework Trace | Full Trace

app/views/admin/galleries/_form.html.erb:8:in `block (2 levels) in _app_views_admin_galleries__form_html_erb__372176781_187575760'
app/views/admin/galleries/_form.html.erb:7:in `block in _app_views_admin_galleries__form_html_erb__372176781_187575760'
app/views/admin/galleries/_form.html.erb:2:in `_app_views_admin_galleries__form_html_erb__372176781_187575760'

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.1 formtastic activeadmin


    【解决方案1】:
    <% if image.object.new_record? %>
    

    【讨论】:

      【解决方案2】:

      我认为如果您发布错误日志转储会有所帮助。什么new_record有点模棱两可?它指的是。

      我认为问题与以下几行有关:

      <% @gallery.images.build %>
      <%= g.inputs :for => :images, :name => "New Image" do |image| %>
        <% if image.new_record? %>
      

      我看到了两种情况:

      1) &lt;% if image.new_record? %&gt; 正在抛出错误,因为图像为零。
      2)&lt;%= g.inputs :for =&gt; :images, :name =&gt; "New Image" do |image| %&gt; 正在抛出错误。 #inputs 是 rails 表单构建器 #fields_for 方法的包装器,无论对象是否为新记录,它的执行方式都不同(我认为如果 image.new_record? 返回 true,它会将属性哈希中的 id 包含为隐藏值)。

      无论哪种方式,都是因为表单构建器正在尝试为 nil 对象创建表单。在调用 #inputs 之前,您尝试构建图库图像是正确的,但我认为它需要比这更早。它可能应该在表单开始构建之前放置(在#semantic_form_for 上方)。

      还有另外两个类似的解决方案。您可能应该在表单开始呈现之前在控制器中构建图库。然后,当您启动 @gallery 对象的表单时,它已经知道它已经构建了一个图像。或者,我认为如果您指定它可能会起作用

      <%= g.inputs :for => @gallery.images, :name => "New Image" do |image| %>
      

      希望其中任何一个都能正常工作,因为问题似乎在于它没有访问刚刚构建的图像。

      【讨论】:

      • 谢谢 - 我刚刚添加了错误日志。我现在正在semantic_form_for 上方构建图库图像,但错误仍然存​​在。我确实打算稍后进行重构,以便在控制器中构建新的画廊图像。
      猜你喜欢
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      相关资源
      最近更新 更多