【问题标题】:RoR having trouble getting data from input into the databaseRoR 在将数据从输入中获取到数据库时遇到问题
【发布时间】: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


【解决方案1】:

您在单独的迁移中添加了 :company,但您似乎忘记在模型中为其添加 attr_accessible


如果您的应用正在运行 rails 3,请将其添加到您的 Order.rb 文件中:

attr_accessible :company


对于 rails 4,将属性添加到您的 order_controller.rb 私有方法
def order_params
      params.require(:message).permit(:company, :et_al)
end



参考资料:
attr_accessor - http://apidock.com/rails/ActiveModel/MassAssignmentSecurity/ClassMethods/attr_accessible

【讨论】:

    猜你喜欢
    • 2017-11-19
    • 1970-01-01
    • 2014-08-04
    • 2018-02-27
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    相关资源
    最近更新 更多