Ruby на Rails: Active :: RecordNotFound Не удалось найти статью без идентификатора - PullRequest
1 голос
/ 15 января 2020

Впервые на rails. Эта проблема, скорее всего, связана с моим неправильным представлением о том, как работает маршрутизация, но неуверенным. Моя маленькая программа идентична примеру блога Articles в онлайн-руководстве для начинающих Ruby on Rails.

Все, что я хочу сделать, это иметь кнопку / ссылку в файле show.html.erb, которая перенаправит меня на другой URL, но мне нужен доступ к идентификатору статьи для доступа к URL, чтобы получить title из этого объекта статьи.

в article_controller.rb У меня есть:

def join
  @article = Article.find(params[:id]) --->getting error, cant find Article without ID
  redirect_to(**irrelevant code**))
end

в шоу. html .erb У меня есть:

<%= link_to "Click here", {method: 'get', :controller => "articles", :action => "join"}

в router.db у меня есть:

get '/articles/join', to: 'articles#join'

Я получаю ошибку ActiveRecord :: RecordNotFound в ArticlesController # join Не могу найти статью без идентификатора

Почему это не работает для моего метода соединения? почему id из params [: id] можно извлечь только в других операциях CRUD?

спасибо

Ответы [ 4 ]

1 голос
/ 16 января 2020

Поскольку ваш метод join требует идентификатора статьи. Вам необходимо передать статью в link_to

0 голосов
/ 16 января 2020
<%= link_to "Click here", {method: 'get', :controller => "articles", :action => "join", id => @article.id} -%>

get '/articles/join/:id', to: 'articles#join'
0 голосов
/ 15 января 2020

В вашем примере вам нужно передать :id статьи в ссылке, которая отправляет ваш запрос к действию join - в данный момент отсутствует параметр.

<%= link_to "Click here", {method: 'get', :controller => "articles", :action => "join", :id => @article.id } %>

Что должно установить: id и make он доступен в действии articles#join.

0 голосов
/ 15 января 2020

Возможно, вам лучше использовать синтаксис ресурсов в ваших маршрутах при добавлении нового действия на ваш контроллер:

try:

resources :articles do
  member do
    get 'join'
  end
end

, который даст вам дополнительный маршрут:

join_article  GET  /articles/:id/join(.format)

, поэтому вы можете использовать:

<%= link_to 'Click Here', join_article(@article) %>

в ваших представлениях.

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