1

私はRailsが初めてで、ペットアプリを作ろうとしています。名前、空腹、気分の 3 つの属性があります。足場を生成し、フィード メソッドをモデルに記述しました。

def feed
 self.hungry==false;
 save!
end

ユーザーが編集ビューでフィードを実行できるようにしたいので、フィードと非フィードを示すチェックボックスを作成しました。私の計画は、更新関数でコントローラーからフィード関数を呼び出すことでした。現在、次のようになっています。

def update
respond_to do |format|
  if @pet.update(pet_params)
    format.html { redirect_to @pet, notice: 'Pet was successfully updated. #{params[:feed]}' }
    format.json { head :no_content }
  else
    format.html { render action: 'edit' }
    format.json { render json: @pet.errors, status: :unprocessable_entity }
  end
end
if @pet.update_attributes(params[:feed])
  @pet.feed
end 
end

ここで比喩を混ぜているような奇妙な感覚がありますが、正しい行動方針については確信が持てません。更新関数から関数を呼び出そうとしていますが、機能していないようです。「フィード」がモデルのパラメーターにリストされていないという事実に関係している可能性がありますが、そうする必要はありません。関数を呼び出すだけです。ヘルプ!

4

1 に答える 1

0

メソッド定義が間違っています。値を割り当てる代わりに、同等性を比較しています。

def feed
 self.hungry == false; # only one = should be used.
 save!
end

ただし、これを行うより良い方法があります。

class Pet
  attr_accessor :feed_me
  before_save :feed

  def feed
    hungry = false if feed_me
  end
end

コントローラーのチェックは必要ありません。

if @pet.update_attributes(params[:feed])
  @pet.feed
end 

ところで、これは間違っています。param[:feed]ペット オブジェクトが正しく更新されたかどうかではなく、存在するかどうかを確認する必要があります。

このソリューションを機能させるには、フォームに属性を追加する必要があります。

= f.check_box :feed_me

これを行う別の方法は、hungry属性をチェックボックスにマップし、ラベル フィードに名前を付けるだけです。

= f.label :hungry, "Feed"
= f.checkbox :hungry

before_save次に、 、attr_accessor、および method を削除しself.feedます。

于 2013-09-19T21:04:48.550 に答える