2016-12-12 8 views
0

私は次の操作を実行したい:このlink_to条件をDRY形式で作成するにはどうすればよいですか?

<% if current_user.has_role? :demo %> 
<%= link_to profile_path(@selected_profile) do %>  
<% else %>  
    <%= link_to profile_path(profile) do %>  
<% end %> 

それを投げているものはif文の中で、link_to内のブロックの始まりです。

このifブロック内のすべてのコードを2回複製する必要はありません。

編集1

これは私が上記のコードから取得エラーです:

SyntaxError at/
syntax error, unexpected keyword_else, expecting keyword_end 
'.freeze;   else 
        ^
+0

'<%=のlink_to何か%やる> をHTMLコード-ここ <% end %>' ..あなたは何あなたが問題を理解していないされていない 'do' –

答えて

2

の詳細です:

<% chosen_profile = current_user.has_role?(:demo) ? @selected_profile : profile %> 
<%= link_to profile_path(chosen_profile) %> 

だから、これはしませんあなたのを繰り返す0のタグが必要です。同じパスにリダイレクトして、profileオブジェクトだけを変更する必要があるので、これは機能します。線が非常に長く見えない場合は、ブロックされている場合は三項を変更することができます。

link_toの後にdoの後にブロックを使用するまでは使用しないでください。だからあなたのエラーを修正します。

+0

@muistooshortカッコ内はごめんなさい。可能であれば、エラーがあれば修正してください。 – Deep

+1

あなたは自分でそれを見つけました。 –

0

あなたはあなたの中にメソッドを定義することによって、これを達成することができます(モデル)

def demo? 
    self.has_role?("demo") 
    end 
をuser.rb

あなたの意見を書き込んでください

<% if current_user.demo? %> 
<%= link_to profile_path(@selected_profile) %>  
<% else %>  
    <%= link_to profile_path(profile) %>  
<% end %> 

これはあなたを助けるかもしれません。

+0

ため' end'が必要になります。問題は 'link_to'内の' do'と 'if'内の' else'です。 – marcamillion

+0

あなたの提案は、今私が得ているのと同じエラーを私に与えるでしょう。 – marcamillion

+0

link_toタグからdo節を削除します。私は私の答えを編集 –

0

doendである必要があります。ここで

  1. ここでのlink_to
  2. ためRuby Doc参照あなたはこのようにそれを行うことができますdo in Ruby

    <% if current_user.has_role? :demo %> 
    <%= link_to profile_path(@selected_profile) do %> 
        selected profile 
    <% end %> 
    <% else %>  
        <%= link_to profile_path(profile) do %> 
        profile 
        <% end %> 
    <% end %> 
    
+0

ええ私はコードを重複しないようにしようとしていました...しかし、私はあなたの意見を取ります。 – marcamillion

0

あなたは、あなたがブロックを開くが、それを閉じていないため、doのエラーを取得している、

<% if current_user.has_role? :demo %> 
<%= link_to 'Profile', profile_path(@selected_profile) %>  
<% else %>  
    <%= link_to 'Profile', profile_path(profile) %>  
<% end %> 

またはは、あなたがコントローラの代わりに

@selected_profile = current_user.has_role?(:demo) ? @selected_profile : profile 

でそれを行うことができ、このコードを試してみてくださいこのビューでは、

<%= link_to 'Profile', profile_path(@selected_profile) %> 

希望に役立つ!

+0

上部がうまくいかないが、下部の提案がある。 'link_to'に' do'が必要です。 – marcamillion

関連する問題