سؤال

في تطبيق 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 Routes أو The: ظروف خيار) [http://api.rubyonrails.org/classes/actionController/Routing.html عند صنع الطرق ، بدلاً من التحقق من ذلك request.post? في وحدة التحكم الخاصة بك.

نصائح أخرى

ألا ينبغي أن تصل إلى parse_role_data من خلال adminhelper؟

تحديث 1: افحص هذا http://www.johnyerhot.com/2008/01/10/rails-using-helpers-in-you-controller/

من مظهر ما إذا كنت تحاول إنشاء واجهة مستخدم لإضافة أدوار للمستخدمين. سأفترض أن لديك مستخدمين بالفعل ، لذلك أقترح إضافة نموذج يحتذى به و rolescontroller. في مساراتك. 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

سيأخذ هذا الدور بيانات المعلمات من النموذج المعروض في الإجراء الجديد وإنشاء نموذج يحتذى به لهذا المستخدم. نأمل أن تكون هذه نقطة انطلاق جيدة بالنسبة لك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top