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 に答える