0

Item モデルのメソッドの値を出力しようとしています (current_user は application_controller で定義されています)。私は現在rablテンプレートとして持っています:

object @item
attributes :id, :name

code :is_liked do |this_item|
  if current_user
    this_item.is_liked current_user
  else
    false
  end
end

そして私のモデルでは:

class Item < ActiveRecord::Base
  ...
  def is_liked user
    if user
      if user.liked_item_ids.include?(self.id)
        return true
      else
        return false
      end
    end
  end
  ....
end

しかし、それは機能していません。これを出力する適切な方法が何であるかはわかりません。これを正しく機能させる方法はありますか?

編集 1

これが私が得ているエラーです:

 Failure/Error: Unable to find matching line from backtrace
 ActionView::Template::Error:
   stack level too deep
4

2 に答える 2

1

あなたの rabl は問題ないように見えますが、ビューにロジックを追加していることに気付いた場合 (rabl はビューと比較できます)、プレゼンターでロジックをリファクタリングすることを検討してください。

rabl を使用したプレゼンターの詳細については、こちら

エラーに関しては、@apneadiving が言ったように、コードベースのどこかに再帰の問題があります。好奇心から、codeブロックの名前をメソッドの名前以外の名前に変更しようとしましたか? 使用している rabl のバージョンによっては、これが問題になる可能性があります。

is_liked最後に、メソッドのリファクタリングを検討する必要があります。

def is_liked user
  return user.liked_item_ids.include?(id) if user
  false
end
于 2013-07-19T07:42:45.507 に答える
0

試す:

node(:is_liked) {|this_item| this_item.is_liked(current_user) }

メソッドはすでにあります。ロジックを再作成する代わりに、ノード内でここを呼び出すだけです。

于 2013-07-19T07:01:12.307 に答える