2014-09-12 55 views
1

我正在构建一个没有表格的模型。意图是我希望它像一个模型一样行事,但我只需要一个对象实例。我的模型类的核心看起来像Rails redirect_to将要索引页面而不是显示

class JobScheduler 
    include ActiveModel::Model 

    @@job_scheduler_instance = nil 

    attr_accessor :timeout 

    # Public: Override the ActiveModel initialize method to set the 
    # job_scheduler_instance. This is used by the JobScheduler::new 
    # method to determine whether to create a new job_scheduler instance 
    # or return the existing one. 
    def initialize(*args) 
    super 

    Rails.logger.warn "JobScheduler instance already exists!" if @@job_scheduler_instance 
    @@job_scheduler_instance ||= self 
    end 

    def id 
    '1' 
    end 

    def to_param 
    '1' 
    end 

    class << self 
    # Public: Modify the ::new method to return the job_scheduler_instance 
    # determined during #initialize. This is designed to ensure that 
    # only one scheduler instance is created at a time. 
    # 
    # Returns a JobScheduler instance. 
    def new(*args) 
     super 
     @@job_scheduler_instance 
    end 

    # Public: Returns the job scheduler instance (if defined). 
    # 
    # Returns a JobScheduler instance. 
    def all 
     Array(@@job_scheduler_instance) 
    end 

    def find(*args) 
     @@job_scheduler_instance 
    end 

    end 
end 

我遇到的问题是,要redirect_to @job_scheduler任何引用似乎要去“/ job_schedulers”路线,又名index行动。我不清楚为什么会发生这种情况,或者我可以做些什么来解决问题。

控制器:

# GET /job_schedulers/new 
def new 
    @job_scheduler = JobScheduler.new 
    redirect_to @job_scheduler 
end 

但是,当我访问/job_schedulers/new,我得到的错误:No route matches [GET] "/job_schedulers",但我本来期望它尝试指向路线/job_schedulers/1

现在,当我控制器更改为

# GET /job_schedulers/new 
def new 
    @job_scheduler = JobScheduler.new 
    redirect_to job_schduler_url(@job_scheduler) 
end 

我得到它重定向到/job_schedulers/1的预期效果,但我不明白为什么这个工作,但上面没有。

路线:

resources :job_schedulers, only: [:show, :new, :create, :destroy] 

任何想法?

谢谢...

+0

你能显示你的路线吗? – Mandeep 2014-09-12 15:25:46

+0

更新了路线。谢谢。 – 2014-09-12 15:41:50

回答

0

我相信redirect_to使用对象的id,使用语法时:

redirect_to @instance_variable 

更多信息,请参见here

因为您只实例化了该对象,所以它没有id。在调用redirect_to之前保存对象将创建一个id对象的记录,并应解决您的问题。

+0

谢谢,我修改了模型以包含def id; '1';结束,所以它会有一个ID,但我仍然有同样的问题。 – 2014-09-12 16:16:39

+0

@SterlingParamore啊。我自己测试了它并设法重现了这个问题。我使用'@ model.create'来代替'@ model.new'来修复它。也许除了'id'之外,还有其他一些东西不存在,而不是持久化对象。 – 2014-09-12 16:21:14

+0

我确定我只是想念别的东西,我只是不知道那是什么。 – 2014-09-16 00:01:49

相关问题