【发布时间】:2015-02-07 18:44:37
【问题描述】:
我试图向现有模型“order.rb”添加一个新列“company”,一切似乎都运行良好,但我似乎无法将输入字段中的数据获取到数据库中的新列中。
我错过了什么?
数据库中的测试数据:
[1] pry(main)> Order.all
Order Load (0.1ms) SELECT "orders".* FROM "orders"
=> [#<Order token: nil, charge_transaction: nil, address_one: "777 Knoll Ln.", address_two: "P.O. Box 743", city: "Los Angeles", state: "CA", zip: "90015", country: "US", status: "SC", number: nil, user_id: "1", shipping: #<BigDecimal:69eed90,'0.595E3',9(36)>, tracking_number: nil, phone: "(626) 513-5035", expiration: "2015-04-03", created_at: "2015-02-06 20:07:04", updated_at: "2015-02-06 20:07:04", payment_option_id: nil, campaign_id: 1, full_name: "John Connor", quantity: 1, terms_of_service: true, order_uri: nil, tax: #<BigDecimal:69f3070,'0.0',9(36)>, company: nil>]
我可以看到公司列在那里(在最后),但无论我在表单上输入什么,我总是得到值 nil。
db/migrate/20150206193142_add_company_to_orders.rb
class AddCompanyToOrders < ActiveRecord::Migration
def change
add_column :orders, :company, :string
end
end
app/controllers/orders_controller.rb 定义创建
@order = Order.new(
:user => current_user,
:campaign => @campaign,
:quantity => params[:order][:quantity],
:company => params[:order][:company],
:full_name => params[:order][:full_name],
:address_one => params[:order][:address_one],
:address_two => params[:order][:address_two],
:city => params[:order][:city],
:state => params[:order][:state],
:zip => params[:order][:zip],
:phone => params[:order][:phone],
:country => params[:order][:country],
:terms_of_service => params[:order][:terms_of_service]
)
app/views/orders/_form.html.erb
%= field_set_tag "Shipping Address", :id => "address" do %>
<%= f.input :company, :label => "Company" %>
<%= f.input :full_name, :label => "Full Name" %>
<%= f.input :address_one, :label => "Street Address 1" %>
<%= f.input :address_two, :label => "Street Address 2" %>
<%= f.input :city %>
<%= f.input :zip, :label => "ZIP or Postal Code", :input_html => { :class => "zip" } %>
<% end %>
【问题讨论】:
-
根据您的标签,这是 Rails 3 项目吗?如果是,请检查
Order模型是否有attr_accessible,如果有,您需要将company添加到允许的字段中。 -
我建议您运行 Order.new(:company => "company name", :other_params...... ) 来查看问题是否出在您的模型、控制器或表单上。然后检查您的记录,如果您的记录保存在控制台中,那么您的问题就在您的表单中。
-
这与您的问题无关,但您可能希望在您的
OrdersController#create方法中使用current_user.orders.new(params[:order].merge(campaign: @campaign)。 -
感谢大家的建议,他们很有帮助。它最终成为包括您的建议在内的多种因素的组合
标签: ruby-on-rails ruby ruby-on-rails-3