2011-11-18 40 views
12

Tôi vừa mới bắt đầu đùa giỡn với Ruby on Rails và đã gặp một vấn đề liên quan đến một hành động khác trong bộ điều khiển từ một góc nhìn cụ thể. Tôi gần như chắc chắn đó là một vấn đề (hoặc thiếu mã) trong tập tin routes.rb của tôi, nhưng tôi nghĩ rằng tôi hiểu lầm chính xác cách thức hoạt động của tệp này & những gì tôi phải làm. Tôi đã có một giải pháp nhưng chắc chắn nó không phải là "cách tốt nhất" để làm điều đó.Sử dụng liên kết Ruby on Rails để liên kết với hành động điều khiển

Tôi có một bộ điều khiển được gọi là home với hai hành động, index (là mặc định) và newbill. Bên index.html.erb tôi có:

<h1>Home View</h1> 
<%= link_to "new", :controller => "home", :action => "newbill" %> 

Tuy nhiên tôi đã nhận được một lỗi định tuyến:

No route matches {:controller=>"home", :action=>"newbill"} 

Làm rake routes mang lại cho tôi những điều sau đây:

root/{:controller=>"home", :action=>"index"} 

sau đó tôi (sau đây một số Googling) bổ sung này mã số để routes.rb

match 'home/newbill' => 'home#newbill', :as => :newbill 

Và sau đó trong index.html.erb của tôi, tôi đã nhận điều này:

<%= link_to "Name", newbill_path %> 

Và hiện đang làm việc này như mong đợi. Tuy nhiên, câu hỏi của tôi là:

  1. Tại sao tính năng này hoạt động? Chính xác những gì đang xảy ra đằng sau hậu trường?
  2. Chắc chắn đây không phải là cách tốt nhất để làm điều đó? Thêm một số khác match 'home/newbill'... cho mọi bộ điều khiển/hành động mà tôi muốn liên kết đến dường như là một cách làm việc rác rưởi.

Tôi thực sự thích Ruby, nhưng phải vật lộn một chút với khía cạnh này của Rails ... định tuyến nói chung là làm rối tung đầu của tôi một chút tôi nghĩ!

Bất kỳ giúp đỡ được nhiều đánh giá cao: D

Cảm ơn,

Jack

Trả lời

7

Bạn nên kiểm tra Rails Routing guide. Việc đọc qua sẽ giúp bạn hiểu những gì đang diễn ra đằng sau hậu trường.

+11

Chúng tôi biết có tài liệu ở đó. -1 nếu tôi có thể vì điều này không cung cấp bất kỳ trợ giúp thực sự nào. – karns

+2

@karns Câu hỏi của người này là "Tại sao sử dụng công cụ định tuyến trong công việc thời trang quy định?". Tôi có thể loại bỏ câu trả lời thực sự (đã được thực hiện trong hướng dẫn định tuyến Rails) hoặc chỉ đơn giản là chỉ cho anh ta. Anh ta muốn hiểu cách thức hoạt động của định tuyến và có một tài liệu chính thức rõ ràng giải thích nó một cách chi tiết. Tôi không thấy vấn đề? –

8

Tôi đoán lần đầu tiên mã của bạn không hoạt động do bộ điều khiển home được định nghĩa là tài nguyên.

Nếu bạn xác định một bộ điều khiển như một nguồn lực trong routes.rb tập tin nó sẽ chỉ hỗ trợ 7 phương pháp chuẩn (Theo kiến ​​trúc REST) ​​

index 
new 
create 
show 
edit 
update 
destroy 

Nếu bạn cần bất kỳ tùy chỉnh nhiều tuyến đường mà bạn nên thêm chúng bằng tay, nói trong trường hợp của bạn 'newbill', có thể đi như

resources :home do 
    collection do 
     get :newbill 
    end 
end 

Nhưng theo hiểu biết của tôi, phương pháp newbill bạn nên đến bills điều khiển new, phương pháp không có trong bộ điều khiển nhà

Bạn nói đúng, các tuyến đường Rails hơi khó hiểu (ít nhất là đối với tôi), nhưng một khi bạn hiểu bạn có thể làm được nhiều thứ thú vị.

Đọc ở đây cho Rails tài liệu hướng dẫn tuyến đường chính thức:

http://guides.rubyonrails.org/routing.html

0

này hoạt động bởi vì đường ray lọc mọi yêu cầu thông qua các bộ định tuyến tìm kiếm một trận đấu. Điều này cho phép bạn xác định các tuyến tùy chỉnh như domain.com/post khi đường dẫn thực sự là blog # post. Trước đường ray 3, tuyến bắt tất cả là tuyến cuối cùng trong tệp tuyến đường. Điều này cho phép bạn xác định một bộ điều khiển và hành động và nó sẽ hoạt động. Tôi đang trên iPad của tôi và không phải gần bất kỳ dự án nào, vì vậy tôi không thể xác minh nó, nhưng tôi nghĩ rằng tuyến đường vẫn còn ở đó trong đường ray 3.1, nó chỉ cần được umcommented.

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