「ヘルパー」メソッドはどこに配置しますか?
-
03-07-2019 - |
質問
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
が定義されていないというエラーが表示されます。私は何を間違えていますか?
解決
ヘルパーは、日付のリストからカレンダーの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?
をチェックする代わりに。
他のヒント
AdminHelperを介してparse_role_dataにアクセスしませんか?
更新1:これを確認してください http://www.johnyerhot.com / 2008/01/10 / rails-using-helpers-in-you-controller /
ユーザーにロールを追加するための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
これにより、新しいアクションに表示されるフォームからロールパラメーターデータが取得され、このユーザーの新しいロールモデルが作成されます。うまくいけば、これはあなたにとって良い出発点です。