为什么表单发布到错误的网址?

Bla*_*man 0 ruby-on-rails

我的表格如下:

<%= form_for [:admin, @post] do |f|%>
<div style="width:660px;">
    <%= f.text_field  :title, :size => 150 %>
    <br/>
    <%= f.text_area :body, :id => "body", :rows => 15 %>
    <br/>
    <%= f.submit %>
</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)

网址目前是:

http://localhost:3000/admin/posts/21/edit
Run Code Online (Sandbox Code Playgroud)

管理员编辑的我的佣金路线是:

edit_admin_post GET    /admin/posts/:id/edit(.:format)
Run Code Online (Sandbox Code Playgroud)

由于某种原因,edit_admin_post_path正在返回:

/admin/post/the-post-title/edit
Run Code Online (Sandbox Code Playgroud)

所以我手动将帖子标题更改为id.

当我执行更新时,我重定向:

if @post.update_attributes(params[:post])
      redirect_to edit_admin_post_path @post 
    end   
Run Code Online (Sandbox Code Playgroud)

但它再次使用'post-title'而不是id重定向.

为什么是这样?

这是铁轨3

注意:

对于show url,我想/ post/my-post-title而不是/ post/234所以我不确定我在哪里更改了b/c我在我的代码中看不到它的引用!

cti*_*ide 5

听起来你的帖子模型中定义了这些内容:

class Post < ActiveRecord::Base

def to_param
  #{name}"
end
Run Code Online (Sandbox Code Playgroud)

这将导致它只返回名称而不是ID.删除您在帖子模型中定义的所有to_params,看看是否能解决它.

将其更改为以下内容:

def to_param
  "#{id}-#{name}".downcase.gsub(/\W+/, "-").gsub(/^[-]+|[-]$/,"").strip
end
Run Code Online (Sandbox Code Playgroud)

这将为您提供相当干净的URL,例如:http:// localhost:3000/admin/posts/21-my-post-title/edit和Post.find(21-my-post-title)的工作方式相同,基本上,作为Post.find(21).