質問

ためのオブジェクトを作成方法のようになります:

 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)

あなたがうまくセットアップ関係を持っている場合は、

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top