2009-03-02 83 views
1

在我的Ruby on Rails应用程序,我有:我在哪里添加'帮手'方法?

class AdminController < ApplicationController 
    def create 
    if request.post? and params[:role_data] 
     parse_role_data(params[:role_data]) 
    end 

    end 
end 

module AdminHelper 
    def parse_role_data(roledata) 
    ... 
    end 
end 

然而,我得到一个错误说没有定义parse_role_data。我究竟做错了什么?

回答

2

助手主要用于复杂的输出相关的任务,像制作日历HTML表格了日期的列表中。任何有关业务规则像解析文件中的相关模型,如下一个可能的例子应该去:

class Admin < ActiveRecord::Base 
    def self.parse_role_data(roledata) 
    ... 
    end 
end 

#Call in your controller like this 
Admin.parse_role_data(roledata) 

还应考虑使用(REST风格的路线或:条件选项)进行路由时[http://api.rubyonrails.org/classes/ActionController/Routing.html],而不是检查控制器中的request.post?

+0

嗯......但我有一个管理员控制器,但不是管理员模型。 – alamodey 2009-03-02 11:05:52

+0

您可以轻松地定义没有子类的模型,即。 `班级管理员`。如果该文件不存在,只需在models目录中创建一个名为`admin.rb`的文件。 – Luke 2009-03-02 11:08:20

0

从外观看你是否试图创建用于向用户添加角色的UI。我假设你已经有了一个UsersController,所以我建议添加一个Role模型和一个RolesController。在你的routes.rb你会做这样的事情:

map.resources :users do |u| 
    u.resources :roles 
end 

这将让你有这样的路线:

/users/3/roles 

在你RolesController你会做这样的事情:

def create 
    @user = User.find_by_username(params[:user_id]) 
    @role = @user.roles.build(params[:role]) 
    if @role.valid? 
     @role.save! 
     redirect_to @user 
    else 
     render :action => 'new' 
    end 
end 

这将从新操作中显示的表单中获取参数数据,并为该用户创建新的角色模型。希望这对你来说是一个很好的起点。