Ruby on rails 初学者Rails 3:我使用的是“创建”方法吗?

Ruby on rails 初学者Rails 3:我使用的是“创建”方法吗?,ruby-on-rails,Ruby On Rails,我有一个属于用户和类别的产品模型。在新产品表单中,我只有名称文本、类别选择和价格文本字段 以下是我在products/new.html.haml中为category创建选择字段的方式: 在ProductsController中,我认为我只需要执行以下操作: def create @product = Product.new(params[:product]) if @product.save # do something else render 'new' end

我有一个属于用户和类别的产品模型。在新产品表单中,我只有名称文本、类别选择和价格文本字段

以下是我在products/new.html.haml中为category创建选择字段的方式:

在ProductsController中,我认为我只需要执行以下操作:

def create
  @product = Product.new(params[:product])
  if @product.save
    # do something
  else
    render 'new'
  end
end
但我最终需要添加代码来加载Category对象,并将价格的货币表示形式转换为十进制。这就是我的工作:

def create
  params[:product][:category] = Category.find(params[:product][:category])
  # to_decimal is declared as a private method in ProductsController
  # and returns a decimal number or nil if the price is invalid
  params[:product][:price] = to_decimal(params[:product][:price])
  @product = Product.new(params[:product])
  if @product.save
    # do something
  else
    render 'new'
  end
end
因此,我的问题是:

1有没有办法让Rails自动加载类别

2我的价格格式是否正确?它似乎应该在模型中,但我无法让它在控制器之前工作


谢谢

我认为您的products表需要一个名为“category\u id”的列整数。这样,您的选择应该在没有附加控制器代码的情况下工作。至于价格,应该有一种方法可以接受params散列中的小数,但我想我需要看看你的表单

Rails惯例中有一条规则称为skinny controller-fat模型

不需要任何转换为十进制,考虑将验证添加到模型:

validates :price, :numericality => true, :presence => true
这意味着你的价格必须是一个数字,不能为空

类别呢? 将字段category_id添加到产品表中,并在模型中放入:

# product.rb
belongs_to :category
# category.rb
has_many :products
请出示您的表格,并作为您的朋友记住本页:

# product.rb
belongs_to :category
# category.rb
has_many :products