首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails -基于对象名称的link_to路径+重构多个自定义操作

Rails -基于对象名称的link_to路径+重构多个自定义操作
EN

Stack Overflow用户
提问于 2015-06-23 03:08:46
回答 1查看 298关注 0票数 0

我希望根据thr对象的名称简化link_to路径,并考虑重构多个自定义操作。

我已经设法让它在下面起作用了。

代码语言:javascript
复制
<% 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 )。

我的控制器里满是我想要干涸的十几个动作。

代码语言:javascript
复制
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...

路由

我的路线如下:

代码语言:javascript
复制
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
  end

rake路由

代码语言:javascript
复制
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执行单个控制器操作,而不是有多个控制器操作?

请知道你看到上面的工作,但正在寻找简化和干燥的解决方案,如果可能的话。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-23 03:21:38

你可以改变路线:

代码语言:javascript
复制
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

然后添加以下操作:

代码语言:javascript
复制
def part
  @techs = Tech.joins(:services).where(services: { name: params[:part_name]})
end

其观点将是:

代码语言:javascript
复制
<% 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 %>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30993184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档