如果创建控制器操作,如何在模型中执行方法?

时间:2015-04-09 16:45:36

标签: ruby-on-rails ruby ruby-on-rails-4

问题在我的rails应用程序中我有一个名为range days的方法我只希望这个工作如果控制器动作是create_half我该怎么办?任何帮助将不胜感激!!

这是我的入门型号

class Entry < ActiveRecord::Base

  self.primary_key = 'id'

  //This is what I want to only happen when my controller action is create_half 
  def range_days
    self.range_days = only_weekdays(leave_start.to_date..(leave_end.to_date)).to_d 
  end

这是我的入门控制器

 class EntryController < ApplicationController


   def half_day
     @entry = Entry.new
     render :half_day
   end

2 个答案:

答案 0 :(得分:0)

我认为你正在寻找一种方法来做这件事。它不需要:

class EntryController < ApplicationController
  def create_half
    @entry = Entry.new.range_days
    #other stuff
  end
end

你应该没事。

答案 1 :(得分:0)

将您的属性名称从range_days更改为其他名称。否则,您将无法获得range_days操作中的值。

self.range_days方法中的

range_days将再次调用range_days方法而不是range_days属性。因此,它将成为无限循环,您将获得 Stack Level Too Deep 异常。

然后您只需在控制器中执行以下操作:

def create_half 
  @entry = Entry.new
  @entry.range_days
  ...
end