질문을 잘못 입력했다고 생각합니다. "params[:projectid] = ?"
은 어떠한 상황에서도 유효한 쿼리 조건이 아니어야합니다.
@conversations = current_user.conversations.limit(10)
@converstaions.where("project_id = ?", params[:project_id]) unless params[:project_id].blank?
Sidenotes :
- 아마 이런 식으로 뭔가를 선호하는 것, 비록
if params[:project_id].blank?
@conversations = current_user.conversations.limit(10)
else
@conversations = current_user.conversations.where("project_id = ?", params[:project_id]).limit(10)
end
: 어떤 경우에
, 당신은 조건문 일종의을 할 수 .find(:all)
을 사용할 필요가 없습니다. 결과 세트가 필요할 때 (예 : @conversations.each
) Rails는 자동으로 쿼리를 실행합니다.
- 가능하면 레일스의 snakecasing 명명 스키마 (예 : 이 아니라
project_id
)를 고수하십시오. 장기적으로 당신과 공동 작업자는 많은 두통을 덜어 줄 것입니다.
감사합니다.하지만 where 쿼리에서 3 개의 매개 변수, project_id, project_status 등이 있다고 가정하면 아이디어가 작동하지 않습니다. 나는 레일스가 조건부 쿼리 매개 변수를 처리하는 더 좋은 방법이 없다는 것에 충격을 받았다.
편집 : 쿼리의 일부가 될 수있는 여러 매개 변수가있는 경우 where
이 해시를 인수로 사용한다고 생각해보십시오. 이를 통해 매개 변수 해시를 쉽게 동적으로 구축하고 where
에 전달할 수 있습니다. 아마 이런 식으로 뭔가 : 위의 경우
conditions = [:project_id, :project_status, :something_else].inject({}) do |hsh, field|
hsh[field] = params[field] unless params[field].blank?
hsh
end
@conversations = current_user.conversations.where(conditions).limit(10)
, 당신은 배열의 모든 분야에 걸쳐 루프를 거라고, 그것은 빈의하지 않는 결과 해시 에 각 하나를 추가 할 수 있습니다. 그런 다음 해시를 where 함수에 전달하면 모든 것이 잘되고 멋장이가됩니다.
감사합니다.하지만 where 쿼리에서 3 params, project_id, project_status 등을 말할 수있는 경우가 아니면 아이디어가 작동하지 않습니다. 나는 레일스가 조건부 쿼리 매개 변수를 처리하는 더 좋은 방법이 없다는 것에 충격을 받았다. – AnApprentice
@AnApprentice : 어떻게 처리 할 수 있는지에 대한 편집 된 답변보기. – vonconrad
마지막 옵션은 매력처럼 작동 ... 우리는 루비의 마법을 부를 수 있을까요? 이것은 훌륭하고 기능적입니다! – scaryguy