Перемещение оценки помощнику в Rails3 - PullRequest
0 голосов
/ 04 февраля 2011

У меня есть следующая оценка, которая прекрасно работает:

В моих списках / detail.html.erb view

<% if user_signed_in? && current_user.id == @listing.user_id %>

Я использую это несколько раз в своих представлениях, поэтому я хотел сделать это вспомогательным методом.

Какой код я могу разместить в моем файле lists_helper, чтобы вместо этого я мог вызвать что-то подобное в моем представлении:

<% if isListingOwner? %>

Любая помощь будет оценена. Спасибо.

Ответы [ 4 ]

3 голосов
/ 04 февраля 2011

Когда мне нужно сделать что-то подобное, я использую Cancan.Тогда вы можете написать что-то вроде:

<% if can?(:update, @listing) %>
  Listing
<% end %>

На мой взгляд, намного чище.

1 голос
/ 04 февраля 2011

Все хорошие предложения, но код, который вы должны добавить в листинг_helper.rb, -

def isListingOwner?
  user_signed_in? && current_user.id == @listing.user_id
end

Лично я бы лучше поставил этот чек в модели:

class Listing
  def owned_by?(user)
    user.id == self.user_id
  end
end

Тогда, по-вашему, вы написали бы:

<% if @listing.owned_by(current_user) %>

Возможно, вы захотите заглянуть в плагин авторизации на основе ролей, если вы делаете много подобных вещей.

1 голос
/ 04 февраля 2011

Поместите его в папку /app/helpers.

Railscast имеет вводное руководство по этой теме http://railscasts.com/episodes/64-custom-helper-modules

0 голосов
/ 04 февраля 2011

Если у вас belongs_to :user в вашей Listing модели, почему бы вам просто не сделать

if current_user == @listing.user

Я предполагаю, что вы используете Devise или что-то, что возвращает значение nil из current_userпользователь не авторизован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...