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进行管理)