0

ユーザーがいる分類群に基づいてパーシャルをレンダリングしようとしています。私のapplication.html.erbレイアウトには、次のコード行があります。

<%= render 'spree/shared/women_subnav' if @enable_women %>

分類群コントローラーのshowメソッド内には、次のものがあります。

@taxon_id = params[:id].split('/').first

そしてtaxons#showで私は持っています:

<% if @taxon_id == params[:id].split('/').first %>
  <%= "@enable_#{@taxon_id}" = true %>
<% end %>

これを実行すると、SyntaxErrorが発生します。しかし、taxons#showに入力するだけの場合:

<% if @taxon_id == params[:id].split('/').first %>
  <%= "@enable_#{@taxon_id}" %>
<% end %>

'= true'がないと、ページがレンダリングされ、'@enable_women'が出力されます。したがって、正しい変数を取得していることがわかります。その変数をtrueに設定する必要があります。私は何が欠けていますか?

本当にありがとう。

4

2 に答える 2

3

まず最初に、いくつかの注意点を示したいと思います。

  • ユーザーの送信可能な入力を最初に呼び出すことは良い考えではありません(?id =を送信すると、nilが返されます)また、utf-8以外のエンコードでは、次のようにアプリがクラッシュします:?id=Ж

  • コントローラーは獣です!ビューでtrue/false instance_variableの値を設定しているようです。出力をレンダリングする前に、コントローラーを使用してロジックを定義してください。特にパラメータに依存する場合。

したがって、解決策として、コントローラーでparams [:id]がINT(11)値を提案する必要があります。

def action
  # returning a Taxon should be a good idea here
  @taxon = Taxon.find(params[:id])
  # as I would give a Taxon class an has_many relation to a User
  @users = @taxon.users
end

そしてあなたの行動の見方では

<%= render :partial => "taxons/users", collection: @users %>

もちろん、返されたユーザーをスコープし、それに応じて必要な部分をレンダリングする優れた機能があります。

「TheRailsway」の詳細については、http: //guides.rubyonrails.org/をお読みください。

楽しむ!

于 2013-03-12T16:25:15.977 に答える
1

使用するinstance_variable_set

instance_variable_set "@enable_#{@taxon_id}", true

これらのことはコントローラー内で行う方がよいことを思い出してください。

于 2013-03-12T15:36:18.827 に答える