2009-03-02 82 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 

這將從新操作中顯示的表單中獲取參數數據,併爲該用戶創建新的角色模型。希望這對你來說是一個很好的起點。