Ruby on rails 是否使用关联模型的参数创建Rails模型?

Ruby on rails 是否使用关联模型的参数创建Rails模型?,ruby-on-rails,ruby,model,routing,associations,Ruby On Rails,Ruby,Model,Routing,Associations,我有两种型号,User和PushupReminder,还有一种方法在我的PushupReminder控制器中创建提醒(这是放置提醒的最佳位置吗?)我希望在传递用户ID时为给定用户创建一个PushUpremider的新实例。在我的PushUpremider表中,通过用户ID列的关联可以正常工作,并且我已经测试过,我可以创建提醒并通过Rails控制台正确发送提醒电子邮件 以下是模型代码的一个片段: class User < ActiveRecord::Base has_many :pu

我有两种型号,
User
PushupReminder
,还有一种方法
在我的PushupReminder控制器中创建提醒(这是放置提醒的最佳位置吗?)我希望在传递用户ID时为给定用户创建一个PushUpremider的新实例。在我的
PushUpremider
表中,通过用户ID列的关联可以正常工作,并且我已经测试过,我可以创建提醒并通过Rails控制台正确发送提醒电子邮件

以下是模型代码的一个片段:

class User < ActiveRecord::Base
    has_many :pushup_reminders
end

class PushupReminder < ActiveRecord::Base
    belongs_to :user
end
我不知道如何在我的代码中为给定的用户运行
create\u a\u rementer
方法(最终将为我的所有用户执行cron作业)。如果有人能帮我把思路放在正确的轨道上,我会非常感激


谢谢

尝试将属性设置为可访问:user而不是:user\u id

attr_accessible :user
然而,更好的方法是

@user.pushup_reminders.create
这样,用户id将自动分配

使用嵌套管线,如下所示:

:resources :users do
  :resources :pushup_reminders
end
这将为您提供params[:user_id]¶ms[:id],以便您可以在数据库中找到您的对象

如果您通过会话了解您的用户,则不需要嵌套路由,而可以使用它来保存内容

使用restful路由,我建议在俯卧撑提醒控制器中使用创建操作。这将是创建此类对象的最传统、最安静的方式

def create
  @user = User.find(params[:user_id]
  @reminder  = @user.pushup_reminders.create()
end

如果需要检查对象创建是否成功,请尝试使用
.new
.save
尝试将属性设置为可访问:user,而不是:user id

attr_accessible :user
然而,更好的方法是

@user.pushup_reminders.create
这样,用户id将自动分配

使用嵌套管线,如下所示:

:resources :users do
  :resources :pushup_reminders
end
这将为您提供params[:user_id]¶ms[:id],以便您可以在数据库中找到您的对象

如果您通过会话了解您的用户,则不需要嵌套路由,而可以使用它来保存内容

使用restful路由,我建议在俯卧撑提醒控制器中使用创建操作。这将是创建此类对象的最传统、最安静的方式

def create
  @user = User.find(params[:user_id]
  @reminder  = @user.pushup_reminders.create()
end
如果需要检查对象创建是否成功,请尝试使用
.new
.save

编辑:演示我在回答中所说的内容。我还发布了一个演示如何处理俯卧撑提醒,当它们以非嵌套方式提供时

保罗肯定走对了路。您需要在两个地方使用这个create功能,如果您想将其作为cron作业运行,第二个地方很重要

  • 在您的
    PushupRemindersController
    中,作为
    用户的嵌套资源
    ;为了通过网络创建俯卧撑提醒
  • 在rake任务中,该任务将作为cron作业运行
  • 您需要的大部分代码已经由Rails提供,并且大部分代码已经在ActiveRecord关联中设置好。对于#1,在
    routes.rb
    中,设置

    当然,您将有一个
    new
    操作,它将向用户呈现一个web表单,等等

    对于第二个用例,
    cron
    任务,在项目的
    lib/tasks
    目录中设置它。这使您可以通过cron任务自由设置一个操作,该操作可以在需要时随时命中。您将拥有对所有Rails模型等的完全访问权限,就像控制器操作一样。真正的诀窍是:如果你有疯狂的自定义逻辑来设置提醒,把它移动到
    pushUpremider
    模型中的一个动作。这样,您就可以从rake任务和控制器中启动一个创建方法,而不必重复编写任何创建逻辑。记住,不要重复你自己(干)

    我发现在设置
    cron
    任务时非常有用的一个gem是。用Ruby编写站点特定的cron作业,并获得需要粘贴到cron选项卡中的确切输出(如果您是通过Capistrano部署的,则完全不需要管理cron作业)

    编辑:演示我在回答中所说的内容。我还发布了一个演示如何处理俯卧撑提醒,当它们以非嵌套方式提供时

    保罗肯定走对了路。您需要在两个地方使用这个create功能,如果您想将其作为cron作业运行,第二个地方很重要

  • 在您的
    PushupRemindersController
    中,作为
    用户的嵌套资源
    ;为了通过网络创建俯卧撑提醒
  • 在rake任务中,该任务将作为cron作业运行
  • 您需要的大部分代码已经由Rails提供,并且大部分代码已经在ActiveRecord关联中设置好。对于#1,在
    routes.rb
    中,设置

    当然,您将有一个
    new
    操作,它将向用户呈现一个web表单,等等

    对于第二个用例,
    cron
    任务,在项目的
    lib/tasks
    目录中设置它。这使您可以通过cron任务自由设置一个操作,该操作可以在需要时随时命中。您将拥有对所有Rails模型等的完全访问权限,就像控制器操作一样。真正的诀窍是:如果你有疯狂的自定义逻辑来设置提醒,把它移动到
    pushUpremider
    模型中的一个动作。这样,您就可以从rake任务和控制器中启动一个创建方法,而不必重复编写任何创建逻辑。记住,不要重复你自己(干)

    我发现在设置
    cron
    任务时非常有用的一个gem是。用Ruby编写特定于站点的cron作业,并获得需要粘贴到cron选项卡中的确切输出(如果您是通过Capistrano部署的,则完全不需要对cron进行管理)