0

我有模型:

class Board < ActiveRecord::Base
  belongs_to :user

  validates :name, presence: true, uniqueness: {scope: :user_id}
  validates :user, presence: true

  def to_param
    "#{user.username}/#{name}"
  end
end

在#create 操作中,我想将用户重定向到:

redirect_to @board

因此,joe对于拥有boardname董事会的用户,它将重定向到:/joe/boardname。取而代之的是,它重定向到/boards/joe/boardname. 知道为什么吗?

在我的路线中,我有:

resources :boards, except: [:new, :show]
get '/new' => 'boards#new', as: 'new_board'
get '/:username/:name' => 'boards#show', as: 'user_board'
4

1 回答 1

0

据我了解,您希望在 URL 中使用用户名,并确保它是唯一的,对吗?登机也一样。

首先你的用户参数不是很好,因为它里面有斜线,它是一个特殊的字符。如果您需要这两个值,请使用其他分隔符,如破折号:

"#{user.username}-#{name}"

其次,如果您需要覆盖 URL 中的 Board 参数,您需要在 Board 模型中执行相同的操作:

  def to_param
    name
  end

然后你需要调整你的路线:

resources :users do
  resources :boards, except: [:new, :show]
end

现在您应该可以使用如下链接:

redirect_to user_board_url(@board)

当用户打开您作为示例使用的 url 时,请求将最终在showBoardsController 的操作中使用参数:

{ user_id: "joe", board_id: "boardname" }

在 中使用一些自定义值时要小心to_param,确保正确转义这些值。

于 2013-10-14T13:39:11.997 回答