2011-07-11 28 views
6

Chúng tôi đang sử dụng ActiveAdmin trong ứng dụng Rails3 của chúng tôi cho các kiểu mặc định. Bây giờ chúng ta cần ghi đè hành động hiển thị. Mô hình OrderProcess là một mô hình tạm thời (không hoạt động), có nghĩa là tất cả các trường được tổng hợp từ các dữ liệu khác. Chúng tôi sử dụng một mô-đun nội bộ cung cấp các phương pháp cần thiết để giả lập các phương pháp MetaSearch mà ActiveAdmin phụ thuộc vào. Sau đây là cách chúng tôi ghi đè lên action show:ActiveAdmin - cách hiển thị mẫu mặc định trong hành động được tùy chỉnh

ActiveAdmin.register OrderProcess do 
    member_action :show, :method => :get do 
    @order_process = OrderProcess.all_orders_for_deal(params['id']) 
    end 
end 

Điều đó cho chúng ta một lỗi phàn nàn về một mẫu mất tích "Thiếu template admin/order_processes/hiển thị với ..."

Chúng tôi cũng cố gắng gọi

render renderer_for(:show) 

nhưng đã tạo ra lỗi về mô hình phương thức bị thiếu có thể do mô hình của chúng tôi không hoạt động và mô-đun liên quan.

Làm cách nào chúng tôi có thể sử dụng các phương thức hiển thị được xây dựng trong ActiveAdmins để hiển thị mô hình của chúng tôi? Bất kỳ trợ giúp được đánh giá cao.

Trả lời

1

Tôi có cùng một vấn đề :(

Tôi đang cố gắng để ghi đè lên một hành động cập nhật và cố gắng để làm cho 'chỉnh sửa hành động'

member_action :update, :method => :post do 
    if params[:user][:password].blank? 
    [:password, :password_confirmation, :current_password].collect{|p| params[:user].delete(p) } 
    end 

    @user = User.find(params[:id]) 
    respond_to do |format| 
    if @user.update_attributes(params[:user]) 
     format.html { redirect_to([:admin, @user]) } 
    else 
     format.html { render renderer_for(:edit) } 
    end 
    end 
end 
+0

Tại sao các bạn tạo member_action để cập nhật? cập nhật được bao gồm trong phương pháp curd tiêu chuẩn vì vậy hãy thử để ghi đè lên nó trong bộ điều khiển ví dụ điều khiển làm def cập nhật # thay đổi của bạn cuối cuối – Naveed

2

Các giải pháp nêu tại this other stackoverflow post làm việc:

render active_admin_template('edit.html.arb'), :layout => false 
+3

Có thể đã thay đổi trong phiên bản mới. Tôi nhận được 'phương thức không xác định 'active_admin_template'' –

+1

Làm thế nào về:' render' admin/* resource_name */* view_name * ',: layout => false' – Ben

2

Tôi gặp sự cố tương tự khi tôi cần ghi đè hành vi của trình điều khiển quản trị hoạt động mặc định cho hành động cập nhật. Tôi đã làm như sau:

controller do 
    def update 
    @model = Model.find(params[:id]) 
    # do stuff 
    if @model.save 
     redirect_to admin_model_path(@model) 
    else 
     render :edit 
    end 
    end 
end 

Chìa khóa chỉ là render :edit sẽ hiển thị trang chỉnh sửa mặc định đã được quản trị viên xác định.

Các giải pháp khác sử dụng

render active_admin_template('edit.html.arb'), :layout => false 

không làm việc cho tôi hay bất kỳ sự kết hợp khác của render renderer_for(:edit).

3

Chỉ cần chạy vào ... Nhận xét của Grant là chính xác, active_admin_template không tồn tại nữa (tôi đang sử dụng phiên bản 1.0.0-pre2).

tôi đã kết thúc đi với:

render :action => :edit, :layout => false

mà dường như để làm việc, mặc dù bạn sẽ phải cung cấp một nhãn cho tiêu đề, hiển thị là "dịch mất tích:. En.active_admin [your_action] _model "

+1

để cung cấp nhãn cho tiêu đề @page_title = "Lable". – harshitpthk

0

Tài liệu activeadmin rất nhẹ về các chi tiết cụ thể về cách ghi đè hành động của bộ điều khiển chuẩn, điều này gây phiền toái khi mã nguồn mờ đục. Nhiều người trong số các viên ngọc trong đá quý dường như đã thay đổi một tấn với phiên bản 1.0, làm cho nhiều câu trả lời Stack Overflow cũ không sử dụng được.

Dù sao, đây là cách tôi đã ở trên để ghi đè hành động #create trong bộ điều khiển activeadmin của tôi (trên Rails 4.2.x):

controller do 
    def create 
     @user = User.create_from_admin(permitted_params[:user]) 

     if @user.persisted? 
     redirect_to resource_path(@user), notice: I18n.t("admin.user.create.notice") 
     else 
     render :action => :new 
     end 
    end 
    end 

Nó đáng chú ý là activeadmin hy vọng, nếu mô hình của bạn là dùng, cho tạo hành động để có một trường hợp mô hình dân cư như @user trước khi nó có thể làm cho action => :new.

Tôi đã viết nội bộ của phương thức tạo tùy chỉnh của tôi làm phương thức lớp trên mô hình của mình để tôi có thể kiểm tra đơn vị và chôn ít mã nhất có thể trong mã activeadmin của mình. Đối với ngữ cảnh, tôi cần ghi đè hành động này vì tôi đang sử dụng Devise và tôi muốn cho quản trị viên của mình tạo tài khoản người dùng bằng mật khẩu tạm thời và email chào mừng tùy chỉnh thay vì email được xác nhận: tạo tài khoản.

Dưới đây là phương pháp lớp User:

def self.create_from_admin(params) 
    generated_password = Devise.friendly_token.first(8) 

    @user     = User.new(params) 
    @user.password   = generated_password 
    @user.skip_confirmation! 

    if @user.save 
     # Code to send custom email with temp password 
    end 

    @user 
    end 
Các vấn đề liên quan