레일스에 다소 익숙하며, 이전의 작은 어플리케이션에서는 모든 종류의 쓰레기가있는 컨트롤러를 어수선하게 잡아 먹었습니다. 모델을보다 효과적으로 사용하려고 시도하고 모델 기능 등에 대해 배울 좋은 곳을 찾을 수 없습니다.레일즈 find_all 모델 방법
나는이 모델을 가지고 있는데, 나는이 을 찾아 내고 싶다. 그래서이 find_maps 방법. 내 subaccounts_controller
에서
class Subaccount < ApplicationRecord
belongs_to :account
has_many :users
has_many :maps
enum state: { active: 0, inactive: 1 }
def find_maps
Map.where(subaccount_id: self.id).all
end
end
는 그래서 같은 방식으로 변수에이 전화를 사용합니다.
class SubaccountsController < ApplicationController
def show
@submaps = Subaccount.find_maps
end
end
이제 컨트롤러에 대한 표시보기로 이동하여이 코드를 사용하면됩니다.
<% @submaps.each do |sm| %>
<%= sm %>
<% end %>
그리고 나서이 오류가 발생합니다.
undefined method `find_maps' for #<Class:0x007fbe95a3b1e0> Did you mean? find_each
나는 sub_account 모델 아래를 호출하고 경우에 왜이 정의되지 않은 방법 find_maps을 얻는 것? 나는 그 길을 따라 모범 사례를 선택하고 싶습니다. 누가 좀 도와 주실 래요? 당신이했던 방식으로 정의하기 때문에
나는 당신이 실제로 인스턴스 방법으로 원하는 것 같아요. Subaccount 클래스에 ID가 없으므로 무효화됩니다. 대신 컨트롤러 코드를 수정하여 하위 계정을 조회하십시오. 'Subaccount.find (params [: id]). find_maps' –
네, 죄송합니다. 클래스 메쏘드가 있기 때문에 이런 식으로는 이해가되지 않지만'id'를 사용하기 때문에 인스턴스가 명확하지 않습니다. 혼란스러워서 사용자가 원하는 것을 이해해야합니다. – Ursus