我正在使用rails创建在线商店应用程序,当用户处理订单时,我最初使用列创建了一个订单支架:
此工作正常,表单将提交,所有数据都将添加到数据库中。但是我想在数据库中添加两个新列,即delivery_date和delivery_time,因此我创建了一个迁移并通过
添加了它们。接下来我进入了_form partial并在form_for方法中添加了新行,现在看起来像
<div class="field">
<%= f.label :delivery_date %>
<%= f.text_area :delivery_time %>
</div>
但是当表单加载并且我将信息输入这两个新字段时,它不会保存到数据库中,当我使用sqlite3从订单中选择*时我得到
id = 1
name = name entered
address = address entered
email = email entered
delivery_date =
delivery_time =
我不知道是否必须在其他地方添加这些列信息?感谢
答案 0 :(得分:6)
在控制器中,您需要允许通过参数传递这些属性。寻找名为order_params
的方法。
答案 1 :(得分:3)
在rails控制器类中,在处理表单提交的方法中,您是否使用将提交的值绑定到ActiveRecord对象的安全方法?例如,如果您执行以下操作:
def create
@person = Person.new(person_params)
@person.save
end
def person_params
params.require(:person).permit(:name, :address, :email)
end
然后,您只需将其他参数名称添加到允许的参数名称列表中。例如:
def person_params
params.require(:person).permit(:name, :address, :email, :delivery_date, :delivery_time)
end
答案 2 :(得分:0)
如果您不使用rails 4,则很可能需要将其添加到attr_accessible。
attr_accessible name, address, ... , delivery_date, delivery_time
答案 3 :(得分:0)
您需要了解在Rails4中引入的strong parameters
概念来解决您的问题。
它使您可以有意识地选择允许在数据库中进行批量更新的属性。
在您的情况下,当您使用3个属性scaffold
生成name, address and email
订单时,rails生成器会在order_params
中为您创建一个现成的私有OrdersController
方法并允许这些方法属性为你。
但是当您使用2个新属性生成迁移时,rails生成器只是为您创建一个迁移文件,而不是使用这两个新属性为您更新order_ params
方法。如果您希望在数据库中更新这两个属性delivery_date and delivery_time
,那么只需在order_params
方法中允许它们。这应该可以解决你的问题。