创建模型实例时传递参数的问题

时间:2014-07-01 22:16:17

标签: ruby-on-rails ruby

我的Rails应用程序中有一个Product.rb模型,它有:title属性和:price属性。在Rails控制台中,我可以成功创建其中一个模型的实例,但是我在传递:title和:price的值时遇到了问题。这是我的products_controller:

class ProductsController < ApplicationController

def create

@product = Product.create(
  :name = params[:name],
  :price = params[:price]
  )
end

end

这是我用来创建实例的命令:

Product.create("name", 123)

:name属性设置为text,而:price属性设置为整数。但是当我点击进入时,这就是我得到的:

ArgumentError: wrong number of arguments (2 for 0..1) 

自从v4之前我还没有写过任何Rails,而且我有点生疏了。有人知道这个问题吗?

1 个答案:

答案 0 :(得分:1)

您在哈希火箭中错过了>

试试这个:

class ProductsController < ApplicationController

  def create
    @product = Product.create(
      :name => params[:name],
      :price => params[:price]
    )
  end
end

顺便说一句,除非你做一些特别特别的事情,否则看起来你可能会以非传统方式做这种形式。

您应该在视图中沿着这些行使用表单助手:

<%= form_for @product do |f| %>
  ...

然后在您的控制器中,按如下方式创建产品:

def create
  @product = Product.new(params[:product])

  if @product.save
    ...
end

更新:正如@Iceman指出的那样,如果你正在使用Rails 4,那么你需要对用于质量分配的参数使用强参数。

通常,您创建一个私有方法来处理这些,并在对象创建/更新方法调用中调用它:

class ProductsController < ApplicationController
  def create
    @product = Product.new(product_params)

    if @product.save
      ...
  end

  private

  def product_params
    params.require(:product).permit(:name, :price)
  end
end