0

私はコントローラーアクションに取り組んでいます。私がやりたいのは、データベース内のレコードを変更することです。

次のコードがあります。

def save_reserve
    @pnr = Pnr.find_by_email(params[:pnr][:email])
    if (!@pnr.blank?)
      @pnr.update_attributes(params[:pnr])
    else
      @pnr = Pnr.new(params[:pnr])
      if @pnr.save
        ...
      else
        ...
      end
    end
  end

なぜ@pnr.update_attributes(params[:pnr])機能しないのですか?

しかし、もしそうなら:

      @pnr.update_attribute(:name, params[:pnr][:name])
      @pnr.update_attribute(:lastname, params[:pnr][:lastname])
      @pnr.update_attribute(:phone, params[:pnr][:phone])
      @pnr.update_attribute(:addr, params[:pnr][:addr])

それは動作します...何か不足していますか?

ありがとうございました!

4

1 に答える 1

3

model.update_attributes(hsh)事実上、呼び出しと同じmodel.attributes = hsh; model.saveです。オブジェクトのコールバックと検証の対象となります。

model.update_attribute(field, value)コールバックや検証を実行せずに、データベース内のそのフィールドを直接更新します。

の戻り値を確認すると、@pnr.update_attributes(params[:pnr])おそらくfalse. coseのブランチでの呼び出しとif [...]同じ方法で、これをチェックする必要があります。savenew

于 2011-07-12T17:20:28.873 に答える