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没有定义。我究竟做错了什么?

4

3 回答 3

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 路由或 :conditions 选项)[ http://api.rubyonrails.org/classes/ActionController/Routing.html]request.post? ,而不是在控制器中检查。

于 2009-03-02T11:03:22.733 回答
0

您不应该通过 AdminHelper 访问 parse_role_data 吗?

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

于 2009-03-02T10:59:24.053 回答
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

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

于 2009-03-02T11:42:08.163 回答