Rails to_param 的问题

1272729223 · 2012年09月27日 · 最后由 miclle 回复于 2012年09月27日 · 2588 次阅读

现在有 3 个 model: category, work, photo

category: has_many :works
works    : has_many :photos,     belongs_to :category
photo    : belongs_to :works

我在categorywork两个 model 中都添加了 permalink 字段,为用作专门的输入 url 地址。

现在 creat category 和 work 都没问题,但是当添加 photo 到 work 中,报错。

添加 photo 的地址:

http://localhost:3000/admin/photos/new?work_id=the-maxogory 

报错内容

No route matches {:action=>"show", :controller=>"admin/works", :id=>nil}

#log
ActionController::RoutingError (No route matches {:action=>"show", :controller=>"admin/works", :id=>nil}):
  app/controllers/admin/photos_controller.rb:14:in `create'

我的 photos_controller:

def create
    @photo = Photo.new(params[:photo])
    if @photo.save
      redirect_to admin_work_path(@photo.work), notice: "Successfully uploaded."
    else
      render "new"
    end
  end

需要重新定义 使用 id-xxxxxxx

worksphotos的 controller 基本是一样的, `

def create
    @work = Work.new(params[:work])
    if @work.save
      redirect_to admin_category_path(@work.category), notice: "Successfully created."
    else
      render "new"
    end
  end

但是不知道为什么创建 works 的时候,正常。创建 photos 的时候就出错。

我在 console 里面看到: [#<Photo id: 48, work_id: 0, created_at: "2012-09-27 11:34:28", updated_at: "2012-09-27 11:34:28", image: "brainhub.png">]

是没有关联上去。

work_id 没有从 new 这个 page 带到 create action 里去。可以在 form 里加个隐藏字段把 work_id 写到里面,这样提交到 create 能拿到 worker_id。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号