我有一个订单对象,它有一个像这样的创建方法:
def create
@order = Order.new(params[:order])
# @order.status_id = "1"
respond_to do |format|
if @order.save
flash[:notice] = 'Order was successfully created.'
format.html { redirect_to(@order) }
format.xml { render :xml => @order, :status => :created, :location => @order }
else
format.html { render :action => "new" }
format.xml { render :xml => @order.errors, :status => :unprocessable_entity }
end
end
end
我想将@order status_id设置为“1”,所以我有
@order.status_id = "1"
但是这段代码不起作用,在我取消注释之后,它仍然无法在db中的status_id中保存“1”,但其他属性可以成功存储。
order.rb
class Order < ActiveRecord::Base
has_many :order_items
belongs_to :status
end
答案 0 :(得分:3)
您应该能够为关系键分配字符串值,并根据需要进行转换。 params总是以字符串形式出现,所以很明显这需要在任何工作中发生。
这种情况下,强大的单元测试有助于缩小问题的范围。它可能是以下之一:
您需要创建一个验证此工作的测试例程:
def test_status_assignment
order = Order.new
order.status_id = '1'
order.save
assert_equal 1, order.status_id
end
答案 1 :(得分:1)
您的模型中可能会attr_accessible
阻止您分配到该字段。它通过使用已批准字段的白名单来实现此目的。
答案 2 :(得分:1)
将@order.status_id = "1"
更改为@order.status_id = 1
Ruby可能正在读取"1"
作为字符串(它应该这样做)而不是整数(你可能正在寻找的东西)。删除引号时,ruby会将其解释为整数。如果您必须将其保留为字符串,请尝试使用my_string.to_i
或"123".to_i
。
如果这不起作用,请发布您收到的任何错误消息。
答案 3 :(得分:1)
此
@order.status_id = "1"
应该是
@order.status_id = 1
或者
@order.status = Status.find_by_id(1)
如果你能很好地建立关系