rails按钮链接动作控制器urlgeneration错误

时间:2017-10-14 07:16:50

标签: css ruby-on-rails routing

两个问题。第一个非常简单,因此它没有自己的问题

如何将css类添加到以下动态rails链接:

 <%= link_to 'Join Now', { controller: 'home', action:'join'}, {class: 'button'} %> 

该类为rest-login并且将应用css样式吗?

现在我上面发布的代码应该替换此代码:

<button class="rest-login"><h3>Join Now</h3></button>

此代码:

 <%= link_to 'Join Now', { controller: 'home', action:'join'}, {class: 'button'} %> 

正确实施。如在控制器中,路由器等都正确设置。我甚至有一个链接调用这里有效的连接操作:

 <div class="sign"><%= link_to 'JOIN NOW', join_path %></div>

此按钮正常工作:

<%= link_to 'List Space', { controller: 'home', action: 'partner'}, { class: 'button'} %>

所以这是一个混乱的&#34;什么!?!&#34;

这是堆栈跟踪。

Showing /home/rickus/Documents/softwareProjects/211hospitality/charlessite/railssuits/suitsandtables/app/views/home/index.html.erb where line #178 raised:

No route matches {:action=>"join", :controller=>"home"}

但我们去控制器:

def join
  end

和routes.rb

get '/join',    to: 'home#clientsignup', as: 'join'

就像我说我的其他链接正在工作。

有人可以向我解释一下吗?

2 个答案:

答案 0 :(得分:0)

您误解了您在路由中使用控制器操作指定的URI。

如果您撰写get '/join',则此join是用于访问您的路线的URI,如果他们指向home#clientsignup,那么您有一个名为clientsignup的方法在我的home控制器中,但正如我所见,您的方法是join,因此您可以尝试替换此部分,例如:

get '/join', to: 'home#join', as: 'join'

你的link_to应该有效。虽然我认为您可以使用路径来访问您的路线,但是如果您想使用更少的代码,例如:

<%= link_to 'List Space', join_path, class: 'button' %>

由于join_path是路由所使用的别名,因此Rails知道它指向的控制器和操作,无需使用controlleraction作为link_to的选项。

其他link_to助手最有可能工作,因为它们在指定的动作中匹配 - 我不能完全说出来,因为它们不在问题中。

答案 1 :(得分:0)

link_to有几个签名:

link_to(body, url, html_options = {})
link_to(body, url_options = {}, html_options = {})
# etc

当您想使用polymorphic routing时,会使用第一个:

<%= link_to 'Join Now', { controller: 'home', action:'join'}, {class: 'button'} %>

要注意多态路由的一件事是它填充了当前请求中缺少的字段:

<%= link_to 'Join Now', { action:'join' }, {class: 'button'} %>

这将链接到请求中调用的控制器。当你真正需要动态时,它真的最好用。

在您调用<%= link_to 'JOIN NOW', join_path %> join_path的另一种情况下,rails是一种路由助手方法,rails会从您的路由动态创建。它返回一个字符串,使其等效于:

link_to 'JOIN NOW', '/join'

如果您正在使用路径助手,并希望通过将选项传递给路径助手方法来向路径添加选项或参数:

link_to 'JOIN NOW', join_path(foo: 'bar'), class: 'button'

这将呈现如下内容:

<a href="/join?foo=bar" class="button">JOIN NOW</a>

此示例将查询参数添加到路径,并将class="btn"添加到链接。将控制器和操作传递给路径助手永远不会完成,因为已经确定了。您可以使用网址或选项调用link_to - 而不是两者。