2016-03-07 52 views
0

帶RoR的新手,誰會瘋了!Rails check_box_tag參數不會在第一次POST時出現,第二次在參數中可用

當我勾選幾個check_boxes並點擊提交按鈕。選中的框(值數組)在Param中不可用。該頁面然後重定向回自己。當我再次做同樣的事情時(勾選幾個check_box並點擊Submit),然後複選框在params中可用,我可以保存它們。第一次出現什麼問題,我該如何解決。我在這裏做錯了什麼?

非常感謝!

<div class="row"> 
<div class="col-md-4"> 
<%= form_for(@user, url: registration_path(@user), html: { method: :put }) do |f| %> 
<%= devise_error_messages! %> 

<div class="field"> 
    <%= f.label :email %><br> 
    <p><%= f.email_field :email, autofocus: true %></p> 
</div> 

<!-- <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %> 
    <div>Currently waiting confirmation for: <%= resource.unconfirmed_email %></div> 
<% end %> 

<div class="field"> 
    <%= f.label :password, "New password" %><br /> 
    <%= f.password_field :password, autocomplete: "off" %> 
</div> 

<div class="field"> 
    <%= f.label :password_confirmation, "New password confirmation" %><br /> 
    <%= f.password_field :password_confirmation, autocomplete: "off" %> 
</div> 

<div class="field"> 
    <%= f.label :current_password %> <i>(to confirm changes)</i><br /> 
    <%= f.password_field :current_password, autocomplete: "off" %> 
</div> --> 


<%= form_for (@user.musician) do |musician_form| %> 
    <%= musician_form.label "Naam" %> 
    <p><%= musician_form.text_field :name %></p> 

    <%= musician_form.label "Wat is je woonplaats?" %> 
    <p><%= musician_form.text_field :city %></p> 

    <%= musician_form.label "In welke Provincie woon je?" %><br> 
    <%= musician_form.select :province_id, Province.all.collect{|t| [t.description, t.id]}, { :include_blank => false } %><br><br> 

    <%= musician_form.label "Wat is je geboortedatum?" %> 
    <p><%= musician_form.date_select :birthday %></p> 

    <%= musician_form.label "Beschrijving" %><br> 
    <%= musician_form.text_area :description, class: "form-control", size: "40x5" %> 

<div class="actions"> 
    <br> 
    <%= f.submit "Wijzigingen opslaan", class: "btn btn-primary btn-xs" %> 
</div> 

<div class="col-md-4"> 
<b>Welk type muzikant ben je?</b><br><br> 

<% for musician_type in MusicianType.all %> 
    <div> 
    <%= check_box_tag "musician[musician_type_ids][]", musician_type.id, @user.musician.musician_types.include?(musician_type) %> 
    <%= musician_type.description %> 
    </div> 
<% end %> 

<br> 
<b>In welke genre(s) ben je geinteresseerd?</b><br><br> 
<% for genre in Genre.all %> 
    <div> 
    <%= check_box_tag "musician[genre_ids][]", genre.id, @user.musician.genres.include?(genre) %> 
    <%= genre.description %> 
    </div> 
    <% end %> 
<br> 

    <% end %> 
<% end %> 

<div class="col-md-4"> 
    <p>Niet tevreden? <%= button_to "Account verwijderen", registration_path(resource_name), data: { confirm: "Weet je zeker dat je je account en bijbehorende band(s) en vacature(s) wilt verwijderen? Het account kan niet meer worden teruggehaald!" }, method: :delete, class: "btn btn-danger btn-xs" %></p> 
</div> 

這裏是我的控制器代碼部分:

def edit 
@user = User.find(current_user.id) 
end 

def update 
    account_update_params =  devise_parameter_sanitizer.sanitize(:account_update) 
    @user = User.find(current_user.id) 

    params[:musician][:musician_type_ids] ||= [] 
    params[:musician][:genre_ids] ||= [] 

# unless params[:musician][:musician_type_ids].present? 
# params[:musician][:musician_type_ids] = [] 
# logger.info "DEBUG INFO: PARAM IS EMPTY #{@musician}" 
# end 
# 
# unless params[:musician][:genre_ids].present? 
# params[:musician][:genre_ids] = [] 
# end 

@musician = current_user.musician 
@musician.update(musician_params) 

if needs_password? 
    successfully_updated = @user.update_with_password(account_update_params) 
else 
    account_update_params.delete('password') 
    account_update_params.delete('password_confirmation') 
    account_update_params.delete('current_password') 
    successfully_updated = @user.update_attributes(account_update_params) 
end 

if successfully_updated 
    set_flash_message :notice, :updated 
    sign_in @user, :bypass => true 
    redirect_to edit_user_registration_path 
else 
    render 'edit' 
end 
end 

回答

0

退房文檔在apidock:在評論

http://apidock.com/rails/ActionView/Helpers/FormTagHelper/check_box_tag

​​

因此,如果你想允許genre_ids你必須寫:

<%= check_box_tag "genre_ids[]", genre.id, @user.musician.genres.include?(genre) %> 
+0

謝謝馬塞洛,但它沒有解決這個問題。同樣的事情發生。首次提交包含無genre_ids []。第二次提交確實包含genre_ids []。所以我不明白爲什麼這些參數不是第一次提交。 –

+0

這裏的日誌首先沒有參數然後與: –

+0

在2016-03-08 12:26:15 +0100 啓動PATCH「/ users」爲:: 1處理由RegistrationsController#更新爲HTML 參數:{「utf8」 =>「✓」,「authenticity_token」=>「L74iqhNLvORfxuNb381nZjgL6CEQW14ScbtqnBgmnhUyTIBo0LI3VvuZnaLNQLqsrBVTpkrvnltjgljG4c + 7JQ ==」,「user」=> {「email」=>「[email protected]」},「musician」=> {「name」=> 「Alexander」,「city」=>「Voorburg」,「province_id」=>「1」,「birthday(1i)」=>「1972」,「birthday(2i)」=>「6」,「birthday )「=>」11「,」description「=>」Description musicians 1 \ r \ n \ nregel 2 \ r \ nregel 3「},」commit「=>」Wijzigingen opslaan「} –

相關問題