Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parameters 友好的\u Id:Id是slug,但url仍然显示对象Id属性(?Id=)_Parameters_Ruby On Rails 4_Ruby On Rails Plugins_Friendly Id - Fatal编程技术网

Parameters 友好的\u Id:Id是slug,但url仍然显示对象Id属性(?Id=)

Parameters 友好的\u Id:Id是slug,但url仍然显示对象Id属性(?Id=),parameters,ruby-on-rails-4,ruby-on-rails-plugins,friendly-id,Parameters,Ruby On Rails 4,Ruby On Rails Plugins,Friendly Id,我试图在rails 4应用程序中实现友好的_Id gem,但遇到了一个障碍 gem正在运行,但是url仍然不太好。看起来是这样的: resources :projects do member do get :featured end end gem正在工作,因为id参数现在是slug,但是我不知道如何删除“?id=”并用斜杠替换它?可能吗?我漏了一步吗 控制器: def featured @project = Project.friendly.find(param

我试图在rails 4应用程序中实现友好的_Id gem,但遇到了一个障碍

gem正在运行,但是url仍然不太好。看起来是这样的:

resources :projects do
  member do
    get :featured
  end
end

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]   
型号:

  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]   
查看:

  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的应用程序。它似乎没有这个问题。。。不记得我是不是错过了一步

任何帮助都将不胜感激。干杯

更新:

  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]   
替换后:

project\u特色路径(:id=>project.slug)

答复如下:

project\u特色路径(project)

我的url看起来好一点,但仍然不起作用。看起来是这样的:

resources :projects do
  member do
    get :featured
  end
end

有一个句号而不是斜杠。在测试中,我发现如果我只是用斜杠替换了点,那么实际上就生成了正确的页面


这只是我的链接格式有问题吗?

答案取决于您的路线,因此发布它们可能也很方便,但如果它们看起来像这样:

resources :projects do
  member do
    get :featured
  end
end
我猜您想要的语法是:

project_featured_path(project)
我签出了friendly_id,friendly_id似乎覆盖了活动记录“to_param”方法。rails路径/url帮助程序调用它来从AR对象构造url,因此将使用url slug构造url

另请参阅中的finder方法,其中友好ID似乎覆盖了“find”方法。它首先寻找一个友好的id,如果失败,它会返回到传统的id来查找


我认为这应该会有帮助,或者希望是一个正确方向的提示。

谢谢您的快速回复!