2016-08-02 2 views
0

속성에 선택할 수있는 8 개의 라디오 버튼 인 mvp와 마지막에 선택 드롭 다운 메뉴가있는 양식이 있습니다. 사용자가 해당 값 중 하나에 대해 라디오 버튼을 누르거나 라디오 버튼을 선택하지 않고 선택 드롭 다운 메뉴에서 옵션을 선택할 수있게하려고합니다. 선택 필드에서 라디오 버튼과 옵션을 모두 선택할 수는 없습니다. 여기 내 코드가있다. 제발 조언.라디오 버튼을 사용하고 양식의 필드 XOR을 레일스로 선택하는 방법은 무엇입니까?

은 HTML은 내가 상관없이 내가 라디오 버튼으로 누르면 어떤 옵션 양식을 작성하지하려고하면 지금 현재로

<%= form_for(current_user.awards.build) do |f| %> 
<%= f.radio_button :mvp, 'Stephen Curry' %> 
<%= f.radio_button :mvp, 'Lebron James' %> 
<%= f.radio_button :mvp, 'Kevin Durant' %> 
<%= f.radio_button :mvp, 'Russell Westbrook' %> 
<%= f.radio_button :mvp, 'Kawhi Leonard' %> 
<%= f.radio_button :mvp, 'Karl-Anthony Towns' %> 
<%= f.radio_button :mvp, 'Chris Paul' %> 
<%= f.select :mvp, ['Al Horford', 'Al Jefferson', 'Andre Drummond', 'Andre Igoudala','Andrew Wiggins', 'Anthony Davis', 'Austin Rivers', 'Ben Simmons', 'Blake Griffin', 'Brook Lopez', 'Carmelo Anthony', 'Chandler Parsons','Chris Bosh', 'Damian Lillard', 'Deandre Jordan', 'Demar Derozan', 'Demarcus Cousins', 'Derrick Favors', 'Dirk Nowitzki', 'Draymond Green', 'Dwight Howard', 'Dwyane Wade', 'Eric Bledsoe', 'Giannis Antetokounmpo', 'Greg Monroe', 'Goran Dragic', 'Gordon Hayward', 'Harrison Barnes','Hassan Whiteside', 'Isaiah Thomas', 'Jahlil Okafor', 'James Harden', 'James Jones','Jeff Teague', 'Jimmy Butler', 'John Wall', 'Kemba Walker','Kevin Love', 'Khris Middleton', 'Klay Thompson', 'Kristaps Porzingis', 'Kyle Lowry', 'Kyrie Irving', 'Lamarcus Aldridge', 'Marc Gasol', 'Mike Conley', 'Nerlens Noel', 'Nicolas Batum', 'Nikola Pekovic', 'Pau Gasol', 'Paul George', 'Paul Millsap','Ricky Rubio','Rudy Gobert', 'Victor Oladipo', 'Zach Lavine'], include_blank: "Select One" %> 
<%= f.submit "Submit Pick" %> 

, 항상 제출됩니다 값은 선택 상자의 하나입니다 . select 필드의 끝에 include_blank : 옵션을 추가했지만 제출 된 값은 공백 값입니다. 따라서 어떤 이유로 기본 제출은 선택 필드에서 선택되는 것과 같습니다.

+0

좋아요, 왜냐하면 당신은 라디오 버튼과 select 태그에 대해 * name *이 같기 때문입니다. 유니크 (uniq) 이름이 필요합니다. –

+0

@ArupRakshit 와우는 의미가 있습니다. 어떻게 다른 이름을 사용합니까? : mvp는 값이 내 양식에 제출되는 속성입니다. 어떻게 그들에게 커스텀 태그를 주겠습니까? – Joe

+0

다른 이름을주고 컨트롤러 안에'if else' 체크를하고, 그 커스텀 이름 값을 실제 속성에 할당하십시오. 결정을 내리고 파라미터를 수정하여 생성/업데이트하기 위해 AR에 보내기 전에 2-3 줄의 코드를 작성해야합니다. 지금 지우시겠습니까? :) –

답변

0

마지막으로 알아 냈습니다. 어떤 시나리오에서는 컨트롤러를 제외하고는 쓸모없는 속성을 만드는 것이 얼마나 효율적인지는 모르겠지만 무엇이든간에. 나는 새로운 속성을 생성했다. "레일즈 g migration add_mvp_select_to_controller mvp_select : string"그리고 나서 내 데이터베이스를 긁어 모았다. 나는 컨트롤러

def create 
    @awardprediction = current_user.awardpredictions.build(prediction_create_params) 
    if @awardprediction.mvp_select.present? && @awardprediction.mvp.present? 
    flash[:alert] = "Your Award prediction could not be saved. Please make sure to only select valid input." 
    elsif @awardprediction.mvp_select.present? 
    @awardprediction.mvp = @awardprediction.mvp_select 
    @awardprediction.mvp_select = nil 
    end 
    unless @awardprediction.save 
    flash[:alert] = "Your Award prediction could not be saved. Please make sure to only select valid input." 
    end  
    redirect_to :back 

end 

의 생성 작용에 다음 코드를 추가 한 후 추가 물론 XOR에게 다음

validate :mvp_xor_mvp_select 
def mvp_xor_mvp_select 
     unless mvp.blank?^mvp_select.blank? 
      errors.add(:base, "Why are you trying to cheat") 
     end 
end 

및 유효성을 검사하는 내 모델 다음에 선택 필드 속성을 변경 : mvp_select

관련 문제