0

跟进这个主题: (Rails)如何以父级的形式显示子记录(一对多)?

我正在创建一个可能有很多产品的类别。因此,我按照用户 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 而不是类别名称。我该怎么办?谢谢先进。

4

1 回答 1

1

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

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

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

如果您的模型中有name属性,您应该会看到一个类别下拉列表。Category看到这个这个

class Category < ActiveRecord::Base
  has_many :products
  attr_accessible :name    
end
于 2010-01-03T05:27:43.910 回答