【问题标题】:rails 4 def to_param with 2 modelsrails 4 def to_param 有 2 个模型
【发布时间】:2015-05-07 09:19:04
【问题描述】:

我在尝试创建友好的 URL 时遇到了一些奇怪的事情。

我有一个项目模型:

def to_param
  "#{id}-#{name}".parameterize
end

这使我的项目 URL 包含“ID”和“名称”就好了:

www.domain.com/items/ID-name

我还有一个类别模型(项目属于类别和用户模型),其中我有与上面相同的 def to_param 但类别 URL 保持“不友好”不包括“名称”:

domain.com/categories/ID 

我在类别表中有名称列,它有值。 我还将祖先用于类别模型。也许是 has_ancestry 导致了这个问题?

我尝试了以下但没有运气:

def to_param
 [id, name.parameterize].join("-")
end

感谢您的建议!

【问题讨论】:

  • 请注意,to_param 仅在您将资源传递给链接助手 (link_to(@user.name, @user)) 或使用 to_param user_path(@user.to_param) 时才有效,请确保您没有调用 .id
  • gem 可以满足您对友好 id 网址的所有需求,friendly_id
  • 感谢#papirtiger,它把我带到了 apidock 并得到了解决方案 :)

标签: ruby-on-rails url ruby-on-rails-4 url-rewriting


【解决方案1】:

Papirtiger 的评论让我找到了解决方案。 问题是我有如下链接:

<% @category.children.in_groups_of(4, false) do |childs| %>
 <tr>
 <% for categories in childs %>
 <td>
 <%= link_to "../categories/#{categories.id}" do %><%= categories.name %><% end %></td>
 <% end %>
 </tr>

初学者解决方案。 :)

删除了丑陋的部分,现在它可以工作了:

<% @category.children.in_groups_of(4, false) do |childs| %>
 <tr>
 <% for categories in childs %>
 <td><%= link_to categories do %><%= categories.name %><% end %> (<%= Item.where(:category_id => categories.id).count %>)</td>
 <% end %>
 </tr>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    相关资源
    最近更新 更多