0

基本的にフォローボタンがあり、クリックするとページが更新され、フォロー解除ボタンが表示されます。以下は、必要な特定のフォームをレンダリングするために使用するコードです。

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ステートメントを作成したりするなど、これを回避する方法は他にもありますが、重複フォームを作成することが私の最後の選択肢になると思います。

ソリューションのおかげであなたを楽しみにしています

敬具

4

2 に答える 2

1

andandgemまたはjusttryと論理式のようなものを使用します。

:followed_id => @user.andand.id || user.id 

それがなくても、同じロジックを使用でき、複数のパーシャルは必要ありません。

:followed_id => (@user && @user.id) || user.id

しかし、フレデリックが言うように、オブジェクトの置換値がすでにある場合は、それを設定するだけでは不十分ですか?

于 2012-06-12T10:16:51.063 に答える
1

'フォールバック'IDがあると仮定すると、これを行う非常に簡単な方法があります。

:followed_id => @user.present? ? @user.id : fallback_id
于 2012-06-12T11:09:42.263 に答える