【问题标题】:Random URL for update action in a State Machine like Rails app状态机(如 Rails 应用程序)中更新操作的随机 URL
【发布时间】:2011-01-22 21:22:04
【问题描述】:

我正在开发一个与状态机非常相似的应用程序。

创建“人”后,有一些属性为空,必须通过“更新”操作来填充。

我在我的模型中定义了一个“unique_token”函数,因此在创建和更新人员时,会分配一个新的唯一字符串。

后来,我在路由中为“编辑”和“更新”操作定义了“/:unique_token”。

后来,在我的控制器中,对于“编辑”和“更新”,我定义了:

@person = Person.find_by_unique_token(params[:unique_token])

但是!

我收到错误消息,因为更新操作仍在尝试查找 ID。

我应该如何覆盖它?

有更好的方法吗?

谢谢。

【问题讨论】:

  • 你能解释一下I get an error because the update action still tries to find an ID.“试图找到”的确切含义吗?如何?身份证和个人身份证一样吗?
  • 是的。更新调用仍然尝试查找控制器“person”、操作“update”和 id“params[:id]”。但我不需要该属性,所以它失败了。
  • 当你用'where'找到它时会发生什么?这个向导 tut 是另一种方法:railscasts.com/episodes/217-multistep-forms

标签: ruby-on-rails url routes state-machine


【解决方案1】:

哇,很简单:

class PeopleController < ApplicationController

  before_filter :authenticate_unique_token, :only => [:edit]

  def authenticate_unique_token
    person = Person.find_by_unique_token(params[:unique_token])
    if person.blank? || person.id != params[:id].to_i
      raise "whatever"
    end
  end

我希望这可以帮助任何人!

【讨论】:

    猜你喜欢
    • 2019-04-25
    • 2014-12-25
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多