0

レールヘルパーをhamlビューと一緒に使用する方法を最もよく理解しようとしています。

もともとこのロジックを含んでいたビューがあります

=   fund_levels_last(i, @fund_level_count) ? ( link_to "add new level", ad, {class: 'button orange sm'} ) : ( link_to "remove", accounts_ad_fund_level_path(ad, fl.object.id), {:class => 'button orange sm', :method => :delete, :remote => true, :confirm => t('q.are_you_sure')} )

ビューをコードからできるだけきれいに保ちたいので、このロジックをヘルパーに移動しようとしています。

   def fund_levels_last(i, flcount)
     if i ==  flcount
       true
     else
       false
     end
   end

   def fund_levels_btn(i, flcount)
     if self.fund_levels_last(i, flcount)
       link_to "add new level", ad, {class: 'button orange sm'}
     else
       link_to "remove", accounts_ad_fund_level_path(ad, fl.object.id), {:class => 'button orange sm', :method => :delete, :remote => true, :confirm => t('q.are_you_sure')}
     end
   end

ただし、ヘルパーでは、ビュー内の変数とオブジェクト (ad、object、fl など) にアクセスできません。これらすべてをヘルパー メソッドに渡すことができると思いますが、どういうわけか複雑すぎて、ここで間違った道を進んでいるような気がします。ビュー内の私の 1 行のコードは、ヘルパー内の 15 行のコードになってしまうようです...

このロジックをビューからヘルパーに移動する最も簡単な方法は何でしょうか?

4

2 に答える 2

3

ちなみにその方法は

def fund_levels_last(i, flcount)
  if i ==  flcount
    true
  else
    false
  end
end

単純に次のようになります。

def fund_levels_last(i, flcount)
  i ==  flcount
end

また、ブール値を返すメソッドは a で終わることが多いため、次の?ようになります。def fund_levels_last?(i, flcount)

于 2012-10-28T16:31:23.593 に答える
2

コードが十分に単純な場合は、実際には部分的なものが必要になる場合があります。次に、次のようなコード/変数を渡すことができます。

<%= render :partial => 'funds/partial_view', :locals => { :var => variable } %>

ただし、ヘルパーが必要な場合は、パラメーターとして渡す必要があります。

def funds_helper(var) //do something interesting end

ただし、すべてのロジックをビューから除外する理由はありません。代わりに、ロジックを部分的に分割します。

コントローラー内: @fund_level = fund_levels_last(i, @fund_level_count)

ビューで: <%= @fund_level ? render :partial => 'funds/add_new_level' : render :partial => 'funds/remove_level' %>

次に、部分ビューに正しいビューを設定します。

于 2012-10-28T20:00:22.333 に答える