質問
ためのオブジェクトを作成方法のようになります:
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
を設定する@めstatus_id"1"のの、これまでの
@order.status_id = "1"
このコードではありません、仕事後strncasecmpでも救うことはできない"1"のstatus_id db、その他の属性にすることを可能にします。
ます。rb
class Order < ActiveRecord::Base
has_many :order_items
belongs_to :status
end
解決
対応することができるでしょうが割り当て文字列値に関係キーで変換されています。Paramsを常に文字列として、このように、ニーズをとらえることもできます。
このような状況が堅調ユニット試験うの範囲の問題です。できる:
- あattr_accessor定義されてstatus_idるブロックの割りになります。
- あstatus_id=方法を定義するブロックの割りになります。
- のstatus_idはリセット時にbefore_validationはbefore_saveます。
また、試験日常的なことを確認しこの作品:
def test_status_assignment
order = Order.new
order.status_id = '1'
order.save
assert_equal 1, order.status_id
end
他のヒント
あなたは、そのフィールドに割り当てることからあなたをブロックして、モデルにattr_accessible
を持つことができます。これは、承認されたフィールドのホワイトリストを使用してこれを行います。
変更@order.status_id = "1"
に@order.status_id = 1
Rubyは(おそらく探しているもの)の代わりに、整数の(行うことになっている)文字列として"1"
を読んですることができます。あなたが引用符を削除するとルビーは整数としてそれを解釈します。あなたはそれを文字列として残さなければならない場合は、my_string.to_i
または"123".to_i
のようなものを試してみます。
これがない作業を行う場合は、あなたが受けているものは何でも、エラーメッセージ投稿してください。
この
@order.status_id = "1"
タグでなければなりません
@order.status_id = 1
それとも、
@order.status = Status.find_by_id(1)
あなたがうまくセットアップ関係を持っている場合は、
所属していません StackOverflow