我有模特:
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'
答案 0 :(得分:0)
根据我的理解你想要一个URL内的用户名,你确保它是唯一的,对吧? 同样适用于董事会。
首先你的用户参数不是很好,因为它内部有斜线,它是一个特殊的字符。如果您需要这两个值,请使用其他分隔符,如dash:
"#{user.username}-#{name}"
其次,如果你需要覆盖URL中的Board param你需要在Board模型中做同样的事情:
def to_param
name
end
然后你需要调整你的路线:
resources :users do
resources :boards, except: [:new, :show]
end
现在你应该能够使用这样的链接:
redirect_to user_board_url(@board)
当用户打开您用作示例的网址时,请求最终会在BoardsController的show
操作中以params结束:
{ user_id: "joe", board_id: "boardname" }
在to_param
中使用某些自定义值时要小心,请确保正确地转义这些值。