나는 내 행동을 내 NewsroomController
에 모두 사용하고 싶다는 선언을하고 있는데, 각 행동에서이를 선언하는 대신 DRY 방식으로 어떻게해야합니까?모든 작업에서 사용할 인스턴스 변수를 어떻게 선언합니까?
@num_posts_today = Post.published.posted_today.count
나는 내 행동을 내 NewsroomController
에 모두 사용하고 싶다는 선언을하고 있는데, 각 행동에서이를 선언하는 대신 DRY 방식으로 어떻게해야합니까?모든 작업에서 사용할 인스턴스 변수를 어떻게 선언합니까?
@num_posts_today = Post.published.posted_today.count
나는 로직을 모델에 넣을 것이다. 다음과 같이 입력하십시오 :
def posts_published_today_count
self.published.posted_today.count
end
또는 클래스 메소드를 작성하십시오.
Post.published_today.count
또는 뷰 :
@posts.published_today.count
당신은 내가 수정을 자유롭게 내가 쓴 무엇을 테스트하지 않았다 ... 생각을 컨트롤러에서
def self.published_today
self.published.posted_today
end
.
내 모델에 .count없이 쓰고 나중에 사용할 필요가있는 범위로 사용할 수 있습니다.
before_action
블록을 사용하십시오. 그러나, 그것이 최고가 아닐 수도 왜 this 읽어보십시오.
더 많은 레일 4 가지 방법이 있습니까? – marcamillion
본질적으로 좋지는 않으며 본질적으로 나쁘지 않습니다. 당신이 정말로 모든 행동에서 그것을해야한다면, 나는 그것을 위해 가라고 말할 것입니다. 예외가 발생하기 시작하면, @ neo의 메소드를 채택하고 그것을 필요로하는 액션의 맨 위에'@num_posts_today = posts_published_today_count'와 같은 것을 사용하는 비 DRY 방식을 선호합니다. 이 기사는 장단점에 대해 설명합니다. 그것들의 무게를다는 것은 당신에게 달려 있습니다. – Amadan
이것은 확실히 좋은 방법입니다. 그러나 OP가 필요하다고 생각하기 때문에 뷰에서 변수를 사용할 수 없게됩니다. 또한 기본적으로 캐시되지 않을 것이라고 생각하므로 두 번 사용하면 두 번 데이터베이스에 요청할 것입니다. – Amadan
보기에서 액세스하고, 클래스 메서드를 작성하고, 편집을 참조하십시오. – neo
물론 가능합니다. – Amadan