2016-11-20 105 views
1

您好我是新来的铁轨和MVC,但我努力学习。现在我正在使用AASM进行从in_draft到发布的转换。 我能够使导轨控制台的变化,但尝试使用的link_to,当我在这个问题得到了错误没有路线匹配[PUT]“/文章”,但我包括放置路线在路线

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

这是MI路线

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}'不起作用。您还可以执行诸如在双引号内放置单引号的内容,其中双引号内的双引号可能不起作用。例如“'最好的文章的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 

享受