【问题标题】:How to redirect_to with custom to_param如何使用自定义 to_param 重定向到
【发布时间】:2013-10-14 13:06:38
【问题描述】:

我有模特:

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

所以对于拥有boardname 板的用户joe,它将重定向到:/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'

【问题讨论】:

  • 你不应该重定向到redirect_to user_board_url(@board)

标签: ruby-on-rails routes ruby-on-rails-4


【解决方案1】:

据我了解,您希望在 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 时,请求将在 BoardsController 的 show 操作中结束,并带有参数:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    相关资源
    最近更新 更多