我正在尝试在我的rails 4应用程序中实现Friendly_Id gem并遇到障碍。
宝石正在运作,但网址仍不漂亮。它看起来像这样:
http://www.example.com/project/featured?id=project-name
gem正在运行,因为id参数现在是一个slug,但是我不知道如何删除“?id =”并用斜杠替换它?那可能吗?我错过了一步吗?
控制器:
def featured
@project = Project.friendly.find(params[:id])
end
型号:
extend FriendlyId
friendly_id :title, use: :slugged
查看:
<% @projects.each do |project| %>
<%= link_to project_featured_path(:id => project.slug) do %>
<%= project.title %>
<% end %>
<% end %>
相关路线:
get "project/featured"
match 'project' => 'project#index', :as => :project, via: [:get, :post]
resources :projects do
member do
get :featured
end
end
match ':controller(/:action(/:id))(.:format)', via: [:get, :post]
我还引用了我之前在rails 3中运行Friendly_Id的应用程序。它似乎没有这个问题...不记得我是否只是错过了一步。
非常感谢任何帮助。干杯!
更新
替换后:
project_featured_path(:id => project.slug)
project_featured_path(project)
我的网址看起来好一点但仍然无法正常工作。它看起来像这样:
http://example.com/project/featured.project-one
有一段时间而不是斜线。在测试中,我发现如果我用斜线替换了点,则实际生成了正确的页面。
我的link_to格式化只是一个问题吗?
答案 0 :(得分:0)
答案取决于您的路线,因此发布它们可能也很方便,但如果它们看起来像这样:
resources :projects do
member do
get :featured
end
end
我猜你想要的语法是:
project_featured_path(project)
我签出了friendly_id source,似乎friendly_id会覆盖活动记录'to_param'方法。这是由rails path / url helpers调用来从AR对象构造url所以将使用url slug构造url。
另请参阅source中的finder方法,其中看起来友好ID会覆盖'find'方法。它首先寻找一个友好的ID,如果失败,它会回归到传统的id。
我认为这应该有助于或有希望成为正确方向的暗示。