Ruby on rails Rails验证帐户是否处于活动状态

Ruby on rails Rails验证帐户是否处于活动状态,ruby-on-rails,model,controller,state-machine,Ruby On Rails,Model,Controller,State Machine,应用程序的用户必须先激活该帐户,然后才能编辑或删除条目 如何将状态从非活动设置为活动? 我正在使用pluginaweek的状态机设置状态 state_machine initial: :inactive do event :activate do state = 'active' end end 我的控制器称为激活操作,它将通过电子邮件发送给用户 def activate @entry = Entry.find([:id]) if (check_email_link(@entry.

应用程序的用户必须先激活该帐户,然后才能编辑或删除条目

如何将状态从非活动设置为活动? 我正在使用pluginaweek的状态机设置状态

state_machine initial: :inactive do
event :activate do
    state = 'active'
  end
end
我的控制器称为激活操作,它将通过电子邮件发送给用户

def activate
@entry = Entry.find([:id])
if (check_email_link(@entry.exp_date))
  if @entry.save
    flash[:notice] = t("activate")
    redirect_to @entry
    else
      flash[:error] = t("already_activated")
      redirect_to @entry
  end 
else
  flash[:error] = t("timeout")
  redirect_to @entry.new
end
结束 文档中说我可以通过entry.state设置Städte,但rhis不起作用

为什么条目不会被激活?每个人都能帮我吗?

一旦你设置好了,它就会根据你的代码为ActiveRecord(缩写为AR)模型添加一些方法

例如:(只是演示代码,可能是一些打字错误)

这是state_machine gem的示例用法,state_machine帮助您管理数据模型的状态,而不是控制器的状态

因此,您的代码可能如下所示:

class SomeController < ApplicationController
  def some_routes_that_activate_user
    # (some logic...)
    @entry.activate
  end
end
class SomeController

希望您能:)

您阅读了文档吗?是的,这就是问题所在。记录员说进入。状态我可以设置状态。但是这不会有任何操作的错误日志吗?或者尝试rails控制台中的方法,例如
@user.activate
,并检查它是否工作或是否存在任何错误。我已经使用并遇到了问题和问题。解决方案是更改gem,改为使用。不,我没有收到任何错误。另一个问题是,我必须使用属性更新功能吗?如果是,为什么我需要状态机。我设置为非活动的初始状态。这很好。你应该为模型实例调用
activate
(在你的示例代码中是@user或@entry),而不是controller方法。你的回答@gaga5lala非常有用。这很容易使用。我只有一句话要换<代码>事件:activate do**transition:inactive=>:active**end
@amarradi oops,我没有注意到state\u machine用法的语法错误。谢谢你的提醒,我在回答中修正了它!这不是语法错误,但第一种方法对我不起作用。为什么我的问题得到-1分?“我能做得更好吗?”阿玛拉迪为迟来的答复感到抱歉。我不知道为什么对你的问题投了反对票,但我想可能有人误解了,这只是一个没有阅读国家机器文件的问题。
# Create an instance of Entry, you will see the attribute `state` value is "inactive" as your setting.
@entry = Entry.create
#=> {:id => 1, :state => "inactive"}

# Then use the method `activate` state_machine define for you according your setting. You will see `state` been changing to "active".
@entry.activate
#=> (sql log...)
#=> {:id => 1, :state => "active" }
class SomeController < ApplicationController
  def some_routes_that_activate_user
    # (some logic...)
    @entry.activate
  end
end