2012-06-17 42 views
6

Tôi có một thời gian thực sự khó hiểu và tôi hi vọng ai đó có thể giúp tôi.Đường ray: Hướng đến hành động điều khiển tùy chỉnh

Dưới đây là bộ điều khiển tùy chỉnh của tôi

class SettingsController < ApplicationController 
    before_filter :authenticate_user! 

    def edit 
     @user = current_user 
    end 

    def update 
     @user = User.find(current_user.id) 
     if @user.update_attributes(params[:user]) 
     # Sign in the user bypassing validation in case his password changed 
     sign_in @user, :bypass => true 
     redirect_to root_path 
     else 
     render "edit" 
     end 
    end 
end 

và tôi có cài đặt tập tin/edit.html.erb và liên kết của tôi

<li><%= link_to('Settings', edit_settings_path) %></li> 

Tuyến

get "settings/edit" 

không hoạt động vì điều này, bởi vì sau đó tôi nhận được

undefined local variable or method `edit_settings_path' for #<#<Class:0x00000001814ad8>:0x00000002b40a80> 

Tôi phải cung cấp tuyến đường nào? Tôi không thể hiểu được. Nếu tôi đặt "/ cài đặt/chỉnh sửa" thay vì một con đường nó messes lên ngay sau khi tôi đang trên một trang tài nguyên khác vì tên tài nguyên được đặt TRƯỚC KHI cài đặt/chỉnh sửa

Thx

+0

trước tiên hãy cho chúng tôi biết bạn đã thử các tuyến đường nào – rubish

+0

đã chỉnh sửa câu hỏi của tôi – Mexxer

Trả lời

16

Tiếp theo nên làm:

get 'settings/edit' => 'settings#edit', :as => :edit_settings 
# you can change put to post as you see fit 
put 'settings/edit' => 'settings#update' 

Nếu bạn sử dụng /settings/edit trực tiếp trong liên kết, bạn không nên gặp sự cố với tên tài nguyên khác đang được thêm vào trong đường dẫn. Tuy nhiên, không có dấu gạch chéo hàng đầu, tức là settings/edit nó có thể có vấn đề đó.

Lý do tại sao edit_settings_path không hoạt động có thể do bạn không khai báo tuyến đường đã đặt tên. Bạn phải sử dụng tùy chọn :as để xác định theo phương pháp nào bạn sẽ tạo đường dẫn/url này.

+0

Cảm ơn bạn rất nhiều! Tôi thực sự chỉ quên/ở phía trước của nó. Tôi đã kết thúc bằng cách sử dụng giải pháp của bạn mặc dù :) – Mexxer

4

Nếu bạn muốn xác định một cách rõ ràng con đường, bạn sẽ sử dụng một cái gì đó giống như

get 'settings/edit' => 'settings#edit', :as => edit_settings 

Tuyên bố này xác định rằng khi một yêu cầu GET được nhận cho thiết lập/chỉnh sửa, hãy gọi SettingsController # chỉnh sửa phương pháp, và rằng quan điểm có thể tham chiếu liên kết này bằng cách sử dụng 'edit_settings_path'.

Dành chút thời gian để đọc the Rails guide on routing. Nó giải thích định tuyến tốt hơn so với bất kỳ tài liệu tham khảo khác ra khỏi đó.

Cũng lưu ý nhiệm vụ rake routes, liệt kê chi tiết của tất cả các tuyến được xác định trong đơn đăng ký của bạn.

1

Thay đổi tuyến đường của bạn để

resources :settings 

Và nó có thể sẽ chỉ làm việc.

Các vấn đề liên quan