Оператор If в представлениях в Rails 3

#ruby-on-rails #ruby-on-rails-3

#ruby-on-rails #ruby-on-rails-3

Вопрос:

Хорошо, итак, я начал привыкать к rails 3 за последние несколько дней, и у меня есть проект в разработке, чтобы протестировать его. Возможно ли сделать следующее или что бы вы предложили, это лучший способ разрешить только авторам сообщений редактировать свои сообщения.

 <% if post.author_id == current_user.id %>
   <td><%= link_to 'Edit', edit_post_path(post) %></td>
   <td><%= link_to 'Destroy', post, :confirm => 'Are you sure?', :method => :delete %></td>
<% end %>
  

Комментарии:

1. Вы должны проверить драгоценный камень CanCan — он очень хорошо работает для определения разрешений для подобных ситуаций. Вы определяете возможности пользователя и затем можете использовать такие инструкции, как if can? :update, post

Ответ №1:

Рекомендация: Не сравнивайте id объекты s — compare.

 <% if post.author == current_user %>
  

Необязательно: рассмотрите возможность использования плагина (только при необходимости), подобного cancan чтобы сделать его еще более наглядным.

 <% if can? :edit, post %>
  

Комментарии:

1. Я пытался использовать ваш лучший пример, но при обновлении я получил эту ошибку: undefined method author»

2. Я полагаю, что он предполагает связь «многие ко многим» с:has_many и т.д.

3. Ваша модель Post должна содержать belongs_to :author, :class_name => "User" ассоциацию, чтобы это работало.