两个问题。第一个非常简单,因此它没有自己的问题
如何将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'
就像我说我的其他链接正在工作。
有人可以向我解释一下吗?
答案 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知道它指向的控制器和操作,无需使用controller
和action
作为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
- 而不是两者。