Bạn đang gọi get_locations
trong phạm vi lớp học, nhưng phương pháp là phương pháp thể hiện chứ không phải phương thức lớp. Nếu ví dụ bạn đã sử dụng def self.get_locations
thì bạn sẽ cung cấp một phương thức lớp, một trong số đó bạn có thể sử dụng trong phạm vi lớp (sau khi bạn đã xác định nó, không phải trước khi bạn đang làm).
Vấn đề ở đây là logic, phương pháp này là gì? Bạn định sử dụng @locations
để làm gì? Nếu nó nằm trong khung nhìn ứng dụng của bạn, thì bạn nên đặt phương thức này vào mô-đun ApplicationHelper
và gọi nó từ bên trong hành động có liên quan. Nếu bạn muốn nó trong một cái nhìn trên bộ điều khiển khác và bạn muốn sử dụng @locations
bên trong phương pháp locations
của bạn, có lẽ thiết lập của bạn có thể trông như thế này:
PagesController
class PagesController < ActionController::Base
def locations
@locations = Location.where(:active => true).order('name').all
end
end
địa điểm .html.erb
<% @locations.each do |location| %>
<%= # do something with 'location' %>
<% end %>
Nếu bạn muốn sử dụng bên trong này của bạn application.html.erb
bạn có thể si mplify nó khá một số ..
ApplicationController
class ApplicationController < ActionController::Base
protect_from_forgery
def locations
Location.where(:active => true).order('name').all
end
end
application.html.erb
<% locations.each do |location| %>
<%= # do something with location %>
<% end %>
Câu trả lời nắm để logic, và để thực sự tìm ra chính xác những gì bạn đang tìm kiếm, biết thêm chi tiết có lẽ sẽ được yêu cầu.
Nguồn
2010-12-07 21:02:00
Tôi cần @locations có sẵn để bố trí ứng dụng của tôi, nhưng cũng để điều khiển khác. Nơi tốt nhất để đặt này? – jmccartie
Nếu bạn cần truy cập nó trong bố cục ứng dụng của bạn thì bộ điều khiển ứng dụng của bạn có lẽ là nơi tốt nhất để đặt nó vì nó sẽ có sẵn trên các bộ điều khiển của bạn. Yêu cầu trình điều khiển gọi 'before_filter' trên phương thức' get_locations' để điền biến '@ locations' instance –