基本的にフォローボタンがあり、クリックするとページが更新され、フォロー解除ボタンが表示されます。以下は、必要な特定のフォームをレンダリングするために使用するコードです。
follow_forms部分:
<% unless current_user?(@user) %>
<% if current_user.following?(@user) %>
<%= render 'relationships/partials/unfollow' %>
<% else %>
<%= render 'relationships/partials/follow' %>
<% end %>
<% end %>
ページを更新したくないため、フォームをajaxフォームに変更しました。フォームの送信が成功したら、フォローボタン/フォームをフォロー解除ボタン/フォームに置き換えたいと思います。一度に表示されるフォームは1つだけなので、これは簡単ではありません。jqueryセレクターを使用してこのフォームを見つけることはできません。
私がやることに決めたのは、follow_formを部分的にレンダリングする新しいアクションを作成することでした。これにより、jqueryセレクターで操作できる適切なフォームが利用できるようになります。
新しいアクション:
class RelationshipsController < ApplicationController
def get_follow_form
respond_to do |format|
format.html { render :partial => 'relationships/partials/follow_form_ajax' }
end
end
end
問題は、@userインスタンス変数にアクセスできないことです。jqueryの成功データを介してフォローされたばかりのユーザーを取得し、それをget_follow_form_urlへの新しいajax呼び出しのデータとして渡し、その情報をローカル変数としてパーシャルに渡すことができるため、これはそれほど重要ではありません。
@userインスタンス変数が使用できないという問題がまだあります。それは私の質問に私をもたらします。
インスタンス変数がnilでない/存在しない場合、どうすれば別の値を使用できますか?
次のフォーム:
<%= form_for current_user.relationships.build(:followed_id => @user.id), :remote => true do |f| %>
<%= f.hidden_field :followed_id %>
<%= f.submit "Follow", :class => 'followButton' %>
<% end %>
このようなことはできますか
:followed_id => @user.id <-if this doesn't exist use this-> user.id
この状況全体にのみ使用される新しいパーシャルを作成したり、厄介なifステートメントを作成したりするなど、これを回避する方法は他にもありますが、重複フォームを作成することが私の最後の選択肢になると思います。
ソリューションのおかげであなたを楽しみにしています
敬具