2016-11-20 6 views
1

Привет, я новичок в рельсах и MVC, но я очень стараюсь учиться. Сейчас я использую AASM для перехода от in_draft к опубликованному. я в состоянии сделать изменения в рельсах консоли, но при попытке использовать link_to я получил ошибку в вопросеНет совпадений в маршруте [PUT] "/ articles", но я включил маршрут по маршрутам

`#/app/views/welcome/dashboard.html.erb 
<% if article.may_publish? %> 
<%= link_to 'Publish', '/articles/#{article.id}/publish', method: :put, class: "alert-link" %> 
<%end%> 

Это ми маршрут

put '/articles/:id/publish', to: 'articles#publish' 

И мой articles_controller публиковать метод

def publish 
    @article.publish! 
    redirect_to @article 
end 

ответ

0

вы действительно, действительно близко! Вам нужно использовать двойные кавычки, чтобы иметь возможность выводить с помощью # {}.

<%= link_to 'Publish', '/articles/#{article.id}/publish', method: :put, class: "alert-link" %> 

должно быть:

<%= link_to 'Publish', "/articles/#{article.id}/publish", method: :put, class: "alert-link" %> 
+0

Спасибо, что была ошибка, вы мне очень помогли, вы можете объяснить мне разницу между «» и «». Я привык использовать '', но я не знал о другом. –

+0

Единственное отличие, по моему мнению, состоит в том, что, предполагая, что статья существует, использование «# article.id» работает, но использование «# article.id» не работает. Вы также можете делать такие вещи, как одинарные кавычки внутри двойных кавычек, где двойные кавычки внутри одиночных кавычек могут не работать. Например «Лучшая статья имеет идентификатор« + # {article.id} » – Jeremy

0

Добро пожаловать в рельсы. Я хотел бы предложить вам использовать member для добавления действия RESTful put. Rails routing

resources :articles do 
    put :publish, on: :member 
end 

Чтобы решить данную проблему текущего маршрута, пожалуйста as: :public_article.

put '/articles/:id/publish', to: 'articles#publish', as: :public_article 

Наслаждайтесь