我希望根据thr对象的名称简化link_to路径,并考虑重构多个自定义操作。
我已经设法让它在下面起作用了。
<% ServiceMenu.all.each do |menu| %>
<tr class=" <%= cycle('odd', 'even') %>">
<td><%= link_to menu.name, ("tech/""#{menu.name.parameterize}") %></td>
</tr>
<% end %>我觉得这是“越轨”,并认为有更好的方式来执行这一点。基于迭代(例如menu.name ),它将转到URL (例如tech/oil-change )。
我的控制器里满是我想要干涸的十几个动作。
def oil_change
@techs = Tech.joins(:services).where(services: { name: 'oil change'})
end
def muffler
@techs = Tech.joins(:services).where(services: { name: 'muffler'})
end
etc...
etc...
etc...
etc...路由
我的路线如下:
resources :techs, :only => [:index, :show], shallow: true do
resources :cars, only: [:new, :create]
collection do
get 'oil-change'
get 'brakes'
get 'muffler'
etc....
etc....
etc....
etc....
etc....
end
endrake路由
oil-change_techs / techs#oil-change
blowout_techs / techs#brakes
muffler_techs / techs#muffler
etc...._techs / techs#etc....
etc...._techs / techs#etc....
etc...._techs / techs#etc....是否有一种方法可以将迭代局部变量menu (menu.name)包含在路径中,而不是我现在使用的被黑客攻击的方式?同样,基于该迭代,允许link_to执行单个控制器操作,而不是有多个控制器操作?
请知道你看到上面的工作,但正在寻找简化和干燥的解决方案,如果可能的话。
任何帮助都将不胜感激。
发布于 2015-06-23 03:21:38
你可以改变路线:
resources :techs, :only => [:index, :show], shallow: true do
resources :cars, only: [:new, :create]
collection do
get 'part/:part_name' => "techs#part", as: :part
end
end然后添加以下操作:
def part
@techs = Tech.joins(:services).where(services: { name: params[:part_name]})
end其观点将是:
<% ServiceMenu.all.each do |menu| %>
<tr class=" <%= cycle('odd', 'even') %>">
<td><%= link_to menu.name, part_techs_path(part_name: menu.name.parameterize) %></td>
</tr>
<% end %>https://stackoverflow.com/questions/30993184
复制相似问题