我在哪里放'帮助'方法?

时间:2009-03-02 10:56:50

标签: ruby-on-rails ruby helper

在我的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未定义。我做错了什么?

3 个答案:

答案 0 :(得分: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)

在制作路线时,还要考虑使用(RESTful路由或:条件选项)[http://api.rubyonrails.org/classes/ActionController/Routing.html],而不是在控制器中检查request.post?

答案 1 :(得分:0)

您是否应该通过AdminHelper访问parse_role_data?

更新1:检查一下  http://www.johnyerhot.com/2008/01/10/rails-using-helpers-in-you-controller/

答案 2 :(得分: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

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