我的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,而且我有点生疏了。有人知道这个问题吗?
答案 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