Как сделать так, чтобы редактирование отображалось на исходном постере. В моем приложении посты называются «машина» - PullRequest
0 голосов
/ 18 мая 2011
undefined local variable or method `current_user' for #<ActionView::Base:0x4cdbb48>
Extracted source (around line #7):

4:     <dd>
5:     <%= car.name %><br />
6:     <%= car.description %><br />
7:     <%= link_to('edit', edit_post_path(@car)) if current_user.cars.include?(@car) %>
8:     <%= link_to "Delete", 
9:     :controller => :car, 
10:    :action => :delete,

Я использую сеанс [: user_id] = @ user.id, чтобы отслеживать текущие пользователи, логин и car.id для идентификатора записи. Как связать их вместе, чтобы только исходный пользователь, который разместил сообщения, мог видеть ссылку редактирования ?? Пожалуйста, помогите мне

Ответы [ 2 ]

0 голосов
/ 18 мая 2011

Вы говорите, что вошли в систему как пользователь @user, поэтому вы можете просто сделать это:

<%= link_to('edit', edit_post_path(@car)) if @car.user_id == @user.id %>

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

приложение / модели / user.rb

Class User < ActiveRecord::Base
  has_many :posts
  ...
end

приложение / модели / post.rb

Class Post < ActiveRecord::Base
  belongs_to :user
  ...
end

Тогда в вашем шаблоне просмотра вы можете сделать:

<%= link_to('edit', edit_post_path(@car)) if @user.posts.include?(@car) %>

Для ясности я настоятельно рекомендую использовать имя модели для имен переменных, когда это возможно, например, @post вместо "@car" для экземпляров модели Post.

0 голосов
/ 18 мая 2011

лично, для решения подобных проблем я использовал камень разработки.

Затем я проверяю, что у меня есть какая-то связь между таблицами пользователя и машины (если использовать ваш пример), а затем помещаю простую проверку erb, чтобы убедиться, что они совпадают.Если это не так, используйте представление только для чтения, в противном случае разрешите редактируемое представление.Проверка erb будет выглядеть примерно так:

<% if current_user.id = car.owner.id %>
  ...show the editable view... 
<% else %>
  ...show the read only view...
<% end %>

Если вы просто не хотите, чтобы они видели представление, если им «не принадлежит», вы можете использовать before_filter в контроллере для проверкиОтношение пользователя к автомобилю, а затем сделать "правильную вещь" на основе ваших необходимых требований приложения.Вы можете перейти к просмотру неавторизованных действий или просто перенаправить их в безопасное место.

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

Надеюсь, это немного поможет ...

РЕДАКТИРОВАТЬ: я должен сказать, что использование драгоценного камня devise предоставляет мне полную поддержку "из коробки" из коробки, а затемВы можете относительно легко адаптировать его к конкретным бизнес-требованиям.

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