0

次のようなコードを実行するとどうなるかという一般的な質問がありました。

<%= form_for(current_user.favorite_relationships.find_by_lesson_id(@lesson),
             html: {method: :delete},
             remote: true) do |f| %>
             <div><%= f.hidden_field :lesson_id %></div>
  <%= f.submit "Unfavorite", class: "btn btn-large" %>
<% end %>

具体的には、コードの最初の行です。私は通常、代わりに何らかの形のインスタンス変数を見ます

current_user.favorite_relationships.find_by_lesson_id

FavoriteRelationshipこれは、コントローラーの破棄アクションに入ると想定できます。上記のフォームから誰かが推測できるものは他にありますか? 破棄アクションで何が利用可能になるか、または渡されるか?

4

2 に答える 2

1

おそらく、コントローラーはLesson変数を介してビューにオブジェクトを提供しました@lesson。現在のユーザー、Userオブジェクト、おそらくhas_many :favorite_relationships、これはテーブルbelongs_to :lesson内に というフィールドがあることを意味します。favorite_relationshipslesson_id

Rails は、モデルに含まれるフィールドの「魔法の」ファインダー メソッドを構築します。モデルにlesson_idフィールドがある場合、Rails はfind_by_lesson_idヘルパーを提供します。@lesson.idRails は、整数の代わりに実際の Lesson オブジェクトを渡すと抽出できるほどスマートです。

最終的な結果は、タイプのオブジェクトがヘルパーFavoriteRelationshipに渡されることです。form_forこれは、コントローラーでオブジェクトを見つけて、(たとえば)@favorite_relationship変数を介してビューに渡すのと同じです。

破棄アクションで何が利用可能になるか、または渡されますか?

FavoriteRelationship の destroy ルートへの後続のリクエストでコントローラーが利用できる唯一のものは、破棄するオブジェクトの ID です。経由でアクセスできますparams[:id]

于 2012-04-29T03:08:50.813 に答える
1
  1. 破棄アクションは AJAX 経由です (の存在remote: true)
  2. 一般に、メインのロジック/コードはコントローラーまたはヘルパー メソッドにリファクタリングされます。

@favorites = current_user.favorite_relationships.find_by_lesson_id(@lesson)IMOは、ビューではなくコントローラー内に配置する必要があり、ビューはパーツ@favourites内にある必要がありform_forます。それが、インスタンス変数について行った観察の理由です

于 2012-04-29T03:11:01.020 に答える