관련 모델 사용자의 국가 ID를 채우기 위해 한 번만 collection_select를 사용했습니다. 이제 다른보기에서 동일한 collection_select 문을 사용하여 사용자를 검색하고 선택한 국가의 사용자를 나열하려고합니다. 내 시도가 실패했습니다. 한 국가가 선택되면 해당 국가의 ID가 선택되었음을 알 수 있습니다. 그러나 제출 단추를 클릭하면 collection_select 문은 선택한 값을 기본 선택된 값으로 재설정하고 선택한 값을 무시합니다. 예를 들어 프랑스 국가를 선택하면 ID는 75입니다. 프랑스를 선택하고 국가 별 검색을 클릭하면 ID가 이와 같이 표시됩니다.액티브 레코드에서 검색하기 위해 collection_select 사용하기 - 레일 3.2.9
http://localhost:3000/users_admin?utf8=✓&query=&user%5Bcountry_id%5D=75
여기는 collection_select 문이있는 양식입니다. 선택한 country_id를 사용하여 사용자 모델의 레코드를 추가/업데이트 할 때 성공적으로 사용하는 문을 복사했습니다. 내 논리가 원하는 것은 국가를 선택하고 국가 별 검색을 클릭하면 선택한 국가가 드롭 다운 목록에서 선택된 상태로 남아 있고 선택한 country_id가있는 사용자 레코드가 화면에 표시됩니다. 이름으로 검색이 예상대로 작동합니다.
<%= form_tag users_admin_path, method: 'get' do %>
<p style="padding-left: 20px;">
<%= text_field_tag :query, params[:query], placeholder: "Search for first, last or full name" %>
<span valign="center"><%= submit_tag "Search by Name", class: "btn btn-medium btn-custom", :name => nil %></span>
<%= collection_select(:user, :country_id, Country.order('name'), :id, :name, {:selected => 233}) %>
<span valign="center"><%= submit_tag "Search by Country", class: "btn btn-medium btn-custom", :name => nil %>
</p>
<% end %>
다음은 컨트롤러에있는 코드입니다.
def users_admin
case
when User.where("active_user = ?", '1').count > 0 # blocked users exist
@users = User.where("active_user = ?", '1').all
when params[:commit]=='Search by Country'
@users = User.where("country_id = ?", params[:country_id]).all
else
@users = User.text_search(params[:query])
end
@microposts = Micropost.all
end
collection_select 문이 코딩 된 방식 또는 다른 논리 문제와 관련된 문제인지 확실하지 않습니다. 내 첫 번째 생각은 어떻게 든 collection_select 문에서 선택한 값을 저장 한 다음 내 where 절에서 사용해야한다는 것입니다. 그러나 나는 그것을하기 위해 성명서를 다시 작성하는 방법을 알지 못하며 화면이 처음 표시 될 때 미국인 233이라는 기본 선택 값을 갖고있다. 나는 또한 하나가 아닌 두 가지 형태가 있어야한다고 생각했다. 나는이 시점에서 내가해야 할 방향을 모른다.
이 문제와 관련하여 주로 스택 오버플로를 검색했습니다. 대부분의 경우 collection_select와 관련된 질문은 내가 사용하게 될 것 같은 과거의 사용과 관련되어있었습니다. 다시 한 번 collection_statement 만 사용했습니다.
도움이 될 것입니다. 당신이 뭔가를 form_tag
을 시도하지 form_for @user do
를 사용할 때
두 개의 분리 된 양식을 만들어야하는지 궁금했습니다. 내가 사용하고있는 것은 form_for를 사용하고있다. 나는 당신이 제안한 것을하고 다시 시도 할 것입니다. 그것은 저에게 새로운 명령입니다. 정말 고마워. –
위에 포함 된 코드는'form_tag'을 사용하고 있습니다 :) 어떻게 작동되는지 알려주세요. 작동하는 경우이 답변을 표시해야합니다. – regulatethis
제안 된 코드가 작동합니다. 이제 다른 사람이 국가를 선택하면 국가 선택을 클릭하면 선택한 국가를 선택한 상태로 유지합니다. 이제 선택한 ID에 대한 사용자 레코드를 표시하는 방법을 알아야합니다. 커밋을 확인할 때 when 절을 완전히 무시하는 것처럼 보입니다. test.log 파일을 검사 할 때 첫 번째 절을 확인하고 건너 뜁니다. 테스트 데이터에서 가져와야합니다. 그런 다음 params [: commit] 절을 확인하지 않고 else 절로 이동합니다. params [: submit]를 사용하도록 변경했지만 동일한 결과가 나타납니다. –