【问题标题】:One to many relationship in ROR using Formtastic使用 Formtastic 的 ROR 中的一对多关系
【发布时间】:2010-01-03 05:20:28
【问题描述】:

跟进这个话题: (Rails) How to display child records (one-to-many) in their parent's form?

我正在创建一个可能包含许多产品的类别。因此,我按照用户 Chandra Patni 的建议使用 Formtastic。但是我在product.rb中添加attr_accessible时发现有问题。

class Product < ActiveRecord::Base
  validates_presence_of :title, :price
  validates_numericality_of :price
  validates_uniqueness_of :title

  attr_accessible :category_id, :name
  belongs_to :category

end

这是 category.rb:

class Category < ActiveRecord::Base
  attr_accessible :name
  has_many :products
end

在我添加 attr_accessible :category_id, :name 之后,验证变得疯狂,无论我输入什么,它都将我视为文本值中的 null。但是在我删除 attr_accessible :category_id, :name 之后,所有东西都可以工作。

还有一件事,在 products/new.html.erb 中,我创建了这个来输入产品信息,

<% semantic_form_for @product do |f| %>  
  <% f.inputs do %>  
    <%= f.input :title %>  
    <%= f.input :price %>  
    <%= f.input :photoPath %>  
    <%= f.input :category %>  
  <% end %>  
  <%= f.buttons %>  
<% end %>

但我发现它返回的是 :category id 而不是类别名称。我该怎么办? 谢谢先进。

【问题讨论】:

    标签: ruby-on-rails ruby rubygems formtastic


    【解决方案1】:

    您需要将其他属性添加到 attr_accessible 以使轨道执行质量分配。

    attr_accessible :category_id, :name, :title, :price, :photoPath
    

    Rails 只会对attr_accessible(白名单)中指定的属性进行批量分配(如果您有的话)。从安全的角度来看,这是必要的。 Rails 还提供了一种通过attr_protected 方法将批量分配列入黑名单的方法。

    如果您的Category 模型中有name 属性,您应该会看到一个下拉列表。请参阅 thisthis

    class Category < ActiveRecord::Base
      has_many :products
      attr_accessible :name    
    end
    

    【讨论】:

    • 网站只有 false %> 比他们可以返回类别名称,但我不能这样做,我只得到对象身份证。
    • 您有类别的名称属性吗?
    猜你喜欢
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 2023-01-16
    • 2012-11-10
    • 1970-01-01
    相关资源
    最近更新 更多