0

Railsの厄介な問題に挑戦しています。

ビューがあり、パーシャルをレンダリングしようとしていますが、次の@prev_activity != message.aboutような場合に限ります。

<%= @prev_activity != message.about ? render(:partial => "dashboards/stream_activity", :locals => { :activity => message.about }) : render(:text => "")  %>

Dashboards / _stream_activity.html.erbで、いくつかのコンテンツをレンダリングし、以前のアクティビティ変数も設定します。

<% @prev_activity = activity %>

Railsは以前にdashboards/_stream_activity.html.erbをレンダリングするため、これは機能しません。@prev_activity != message.aboutしたがって、@prev_activityはに等しくなりmessage.aboutます。

これを解決する方法はありますか?

4

4 に答える 4

0

三項演算子を使用しない場合、問題は解決する可能性があります。

<% if @prev_activity != message.about %>
  <%= render(:partial => "dashboards/stream_activity", :locals => { :activity => message.about }) %>
<% else %>
  <%= render(:text => "") %>
<% end %>

(この機能をビューヘルパーメソッドに配置するとよいでしょう)

于 2013-01-10T08:54:04.740 に答える
0

<% @prev_activity = activity %>部分呼び出しの前など、変数セットのコードを保持します。たとえば、そのコードを呼び出し元のコントローラーに保持してから、部分的にレンダリングします。例えば ​​-

def myactivity
  // your code
  @prev_activity = activity
  render("dashboards/stream_activity",:locals => { :activity => message.about }) 
  if @prev_activity != message.about
end
于 2013-01-10T09:15:52.747 に答える
0

私はついにその解決策を見つけました。@prev_activityに設定したコレクションをレンダリングするビューでnil

<% @prev_activity = nil %>
<%= render :partial => "dashboards/stream_message", :collection => @workspace_stream.messages %>

dashboards/_stream_message.html.erb で期待どおりに動作するよりも:

<% if @prev_activity != message.about %>
  <%= render partial: "dashboards/stream_activity", locals: { activity: message.about }%>
<% end %>

ダッシュボード/_stream_activity.html.erb:

<% @prev_activity = activity %>

@prev_activityコントローラー内への設定nilは、ここに投稿された他のすべてのソリューションと同様に機能しませんでした。

于 2013-01-10T09:48:36.737 に答える
0

試す

 <%= render(:partial => "dashboards/stream_activity",:locals => 
                        { :activity => message.about }) 
                        if @prev_activity != message.about %>
于 2013-01-10T08:51:28.233 に答える