2014-10-03 77 views
0

我有一个控制器,按照对象的基础上的数字位置顺序:设置一个before_action基于的方法中的条件语句

<%= form_for @subject do |f| %> 
    <p><%= f.label :position %></p> 
    <p><%= f.select :position, [email protected]_count %></p> 
<% end %> 

据推测,如果有人想创建一个新的课题,一个额外的数字位置将被添加到选择框中。例如,如果有5个主题并且有人想要添加另一个主题,则会有6个职位可供选择。

这是我目前如何设置我的控制器。

def new 
    @subject = Subject.new 
    @subject_count = Subject.count + 1 
end 

def create 
    @subject = Subject.new(subject_params) 
    @subject_count = Subject.count + 1 
end 

def edit 
    @subject_count = Subject.count 
end 

def update 
    @subject_count = Subject.count 
    ... 
end 

private 
    def subject_params 
    params.require(:subject).permit(:name, :position, :visible) 
    end 

    def set_subject 
    @subject = Subject.find(params[:id]) 
    @subject_count = Subject.count 
    end 

我想用before_action会在一个方法只对新增加1到Subject.count和创建操作,以保持该代码DRY。有没有办法设置一个条件,我可以做到这一点?这是我脑子里想的:

def_set_subject_count 
    # if new || create actions are requested 
    # @subject_count = Subject.count + 1 
    # elseif edit || update actions are requested 
    # @subject_count = Subject.count 
    # end 
    end 

回答

2

当然,你可以使用action_name获得与当前操作的名称的字符串。所以像这样的东西会工作:

def set_subject_count 
    @subject_count = if %w(new create).include?(action_name) 
        Subject.count + 1 
        else 
        Subject.count 
        end 
end 
相关问题