2009-03-02 12 views
1

Ruby on Rails uygulamasında,'Yardımcı' yöntemleri nereye koyacağım?

class AdminController < ApplicationController 
    def create 
    if request.post? and params[:role_data] 
     parse_role_data(params[:role_data]) 
    end 

    end 
end 

ve ayrıca

module AdminHelper 
    def parse_role_data(roledata) 
    ... 
    end 
end 

var. parse_role_data'in tanımlanmadığını belirten bir hata alıyorum. Neyi yanlış yapıyorum?

cevap

2

Yardımcıları çoğunlukla tarihlerini listesi dışına takvimi için bir HTML tablosu yapmak gibi, karmaşık çıkış ilgili görevlerde kullanılır. (RESTful yolları veya: koşullar seçeneği) kullanılarak içine Ayrıca

class Admin < ActiveRecord::Base 
    def self.parse_role_data(roledata) 
    ... 
    end 
end 

#Call in your controller like this 
Admin.parse_role_data(roledata) 

bak: ilişkili modelin, aşağıda olası bir örnek gitmeli bir dosya ayrıştırma gibi iş kuralları ile ilgili bir şey yolları yaparken [http://api.rubyonrails.org/classes/ActionController/Routing.html] yerine kontrol cihazınızda request.post? kontrol ediliyor. Kullanıcılara rol eklemek için bir kullanıcı arabirimi oluşturmaya çalışıyorsanız, görünümden

+0

Hmmm ... ama bir yönetici denetleyicim var ama bir yönetici modeli değil. – alamodey

+0

Kolayca modeli sadece çocuk sınıfıyla tanımlayabilirsiniz, örn. sınıf yöneticisi. Dosya yoksa, modeller dizininde 'admin.rb' adlı bir dosya oluşturmalısınız. – Luke

+0

Artık "Admin: Class" için "undefined method" parse_role_data "alıyorum. – alamodey

0

Ben bir UsersController zaten var varsayalım, bu yüzden bir Rol model ve bir RolesController eklemenizi tavsiye ederim.

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 
: Eğer böyle bir şey yapmak istiyorum senin RolesController olarak

/users/3/roles 

: Bu gibi bir rota var sağlayacak

map.resources :users do |u| 
    u.resources :roles 
end 

: En routes.rb size böyle bir şey yapmak istiyorum

Bu, yeni eylemde görüntülenen formdan params verilerini rolünü alır ve bu kullanıcı için yeni bir rol modeli oluşturur. Umarım bu sizin için iyi bir başlangıç ​​noktasıdır.

+0

Doğru, ama umarım yanlış yaptığını vurgulayacaktır. Denetleyicilerinizde yardımcıları kullanmak istemeniz normalde modelde yeterince yapmadığınızın bir göstergesidir. – jonnii

İlgili konular