В представлении (index.html.erb), у меня есть список всех моих статей:Настройка параметров с точки зрения (лучшие практики)
<% @articles.each do |article| %>
...
<%= link_to 'Show', article_path(article) %>
<%= link_to 'Edit', edit_article_path(article) %>
<%= link_to 'Delete', article_path(article), method: :delete, data: { confirm: 'Are you sure?' } %>
...
<% end %>
И я хотел бы сделать ссылку (т.е. только админы), где администратор может установить атрибут «незаконный» в качестве атрибута true/false. Что-то в этих строках:
<% if current_user.try(:admin?) %>
<%= link_to "Mark as illegal", article, :method => "set_article_as_illegal" %>
<% end %>
Это, очевидно, не работает. Но я не знаю, как это сделать, наилучшим образом. Единственный способ, о котором я могу думать, действительно неуклюжий (вариант В ниже).
Путь, который, я думаю, должен быть выполнен (или, по крайней мере, что-то в этом роде).
A) Создание двух помощников-функции, как, например:
def set_article_as_illegal(article)
article.update_attribute :illegal, true
end
def set_article_as_legal(article)
article.update_attribute :illegal, false
end
И как-то называть их, как например:
<%= link_to "Mark as illegal", article, :method => "set_article_as_illegal" %>
... Но я не знаю, как сделать ссылку (или кнопку), которая выполняет метод и принимает вход (который должен быть статьей в этом случае).
B) Создание нового контроллера (или их нескольких) для его выполнения.
Это просто кажется неправильным, но это единственный способ, которым я смогу достичь того, чего хочу достичь в данный момент, и именно поэтому я упоминаю об этом. Так это будет означать:
- Создание маршрута:
get '/make_article_illegal', to: 'article#make_illegal'
- Создание другой маршрут:
get '/make_article_legal', to: 'article#make_legal'
- Создание контроллера
make_illegal
, который обрабатывает, что делает его незаконным. - Создание другого контроллера
make_legal
, который делает его законным.
Но это, похоже, неловко.
Должно быть очевидный способ сделать это, что мне не хватает.
Спасибо за ответ.Я получаю эту ошибку, когда я реализую ваше (первое) решение: >> Нет сопоставлений маршрутов {: action => "update_legality",: controller => "articles",: id => 24,: negative => false} missing required ключи: [: незаконно] << ... Если я изменю маршрут на >> get '/ update_article_legality' << (для целей отладки), тогда страница загружается, и я вижу, что ссылка «Сделать законную» ссылки на это: 'update_article_legality? id = 24 & negative = false'. Но я не могу исправить ошибку. : -/Вы знаете, что делать здесь? – Zeth
Да, конечно, извините, это то, что происходит, когда вы не можете проверить свой код. См. Мое обновление. Это потому, что вы не можете передавать логические значения в 'link_to'. Вот почему я предпочел бы второе решение. – Iceman
Это работает! Большое спасибо. – Zeth