【问题标题】:undefined method `has_many' for FormtasticFormtastic 的未定义方法“has_many”
【发布时间】:2012-04-09 08:36:16
【问题描述】:

我收到此错误:

undefined method `has_many' for #<Formtastic::SemanticFormBuilder:0xb410d4c>

当我这样使用它时它会起作用:

ActiveAdmin.register Ressource do
    form do |f|  
        f.inputs do
            f.input :offer_id, :as => :hidden
            f.input :name
            f.input :category, :include_blank => false, :collection => Category.order('place ASC').all, :member_label => :to_label
            f.input :description, :input_html => {:class => 'editor'}
            f.input :price
        end
        f.has_many :roles do |app_f|
            app_f.inputs do
                if not app_f.object.id.nil?
                    app_f.input :_destroy, :as => :boolean, :label => "Supprimer l'utilisateur du lot"
                end
                app_f.input :user, :member_label => :to_label, :label => 'Assigné le lot'
                app_f.input :name, :include_blank => false
            end
        end
        f.buttons
    end
end 

但它不能部分工作,我需要通过不同的方式或其他方式调用 has_many 方法吗?

【问题讨论】:

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


    【解决方案1】:

    ActiveAdmin 使用一些有用的助手扩展了 formtastic,例如 has_manylib/active_admin/form_builder.rb 在 activeadmin gem 中)。

    很遗憾,这些帮助器在您的模板中默认不可用。

    这里有两个选项:

    1. 如果您不需要额外的has_many 功能(看起来active_admin 添加了一些javascript 以便于向集合中添加新记录),那么您可以使用stock formtastic。此示例在 activeadmin 文件和部分文件中都应该可以正常工作:

      ActiveAdmin.register Ressource do
        form do |f|  
          # ...
          f.inputs :for => :roles do |app_f|
            # ...
            app_f.input :name, :include_blank => false
          end
          f.buttons
        end
      end 
      
    2. 明确使用 ActiveAdmin 表单构建器:

      <%= semantic_form_for [:admin, @resource], builder: ActiveAdmin::FormBuilder do |f| %>
        <!-- ... -->
      
        <%= f.has_many :teachers do |app_f| %>
          <%= app_f.inputs do %>
            <!-- ... -->
          <% end %>
        <% end %>
      
        <%= f.buttons %>
      <% end %>
      

    我希望这会有所帮助。

    【讨论】:

    • 我使用了选项二,因为我想使用 jQuery UI 自动完成输入区域添加子项。似乎部分现在可以访问 has_many 助手,但它现在说未定义的方法 `new_record?'尝试创建新字段时,对于 has_many 的 nil:NilClass。有什么想法可能导致这种情况吗?我怀疑需要在控制器中进行 .build 操作?
    • 没关系,我必须在模型中使用accepts_nested_attributes_for 才能正常工作。 :)
    • 这为我修复了第一个错误,但现在我在创建 has_many 的行上收到“无法修改冻结字符串”错误。有什么想法吗?
    • @elsurudo 这听起来像是一个不同的问题。也许发布一个带有堆栈跟踪和更多信息的新问题......
    • 我有这样的问题stackoverflow.com/questions/26996966/… has_many..(
    【解决方案2】:

    有办法

    form :html => {:multipart => true} do |f|
    end
    

    或者,如果你想使用部分:

    <%= active_admin_form_for [:admin, @resource] ,:html => {:multipart => true} do |f|%>
    <% end %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多