Я создал модель предпочтений для управления настройками электронной почты. Прямо сейчас вложенная форма не отображается на фактической странице. Я пробовал серию различных тактик, но не могу понять.Принимает вложенную форму атрибута для has_one не заполняется
Я убедился я предпочтение локально настроен, изменил fields_for к (@ user.preference), которые не работают и т.д.
Я использую Rails 4.2.2, Ruby версия 2.2.1 ,
схемы
create_table "preferences", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "user_id", null: false
t.boolean "new_match", default: true, null: false
t.boolean "accepted_match", default: true, null: false
t.boolean "match_reminder", default: true, null: false
t.boolean "new_message", default: true, null: false
end
модель пользователя
has_one :preference, dependent: :destroy
accepts_nested_attributes_for :preference
модель предпочтения
class Preference < ActiveRecord::Base
belongs_to :user
end
фактическая форма, которая имеет содержит партиалы к вложенной форме:
<%= form_for(@user, id: "editing-info") do |f| %>
<ul class="tabs">
<li class="tab-link current" data-tab="tab-account">
<%= t("edit_user.tabs.account") %>
</li>
<li class="tab-link" data-tab="tab-interests">
<%= t("edit_user.tabs.interests") %>
</li>
<li class="tab-link" data-tab="tab-settings">
<%= t("edit_user.tabs.settings") %>
</li>
</ul>
<div class="tab-content current" id="tab-account">
<%= render "users/tabs/account", f: f %>
</div>
<div class="tab-content" id="tab-interests">
<%= render "users/tabs/interests", f: f %>
</div>
<div class="tab-content" id="tab-settings">
<%= render "users/tabs/settings", f: f %>
</div>
<div id="button-container">
<%= link_to 'Cancel',
user_path(current_user),
data: { disable_with: "Loading..." },
class: "cancel-desktop" %>
<%= f.submit "Save",
data: { disable_with: "Loading..." },
class: "save main-save-button-edit" %>
</div>
<% end %>
частичный, который включает гнездящийся вид
<div id="settings">
<h4 class="notifications-label">Notifications</h4>
<div class="notifications setting-category info-holder">
<div class="mobile setting-holder">
<%= f.label :mobile, "Mobile", class: "setting-label" %>
<%= f.text_area :mobile, placeholder: "Add mobile number", class: "setting-input" %>
</div>
<div class="email-holder setting-holder main-email-edit">
<%= f.label :email, "Email", class: "setting-label" %>
<%= f.text_area :email, placeholder: "Add email address", class: "setting-input" %>
</div>
<p class="setting-descrip">This email is where Glassbreakers notifications will be sent. Please continue to use your email associated with your LinkedIn account to sign in.</p>
</div>
<h4 class="email-label">Emails</h4>
<%= f.fields_for :preference do |user_preference| %>
<div class="email-notifications-holder">
<div class="email-holder">
<%= user_preference.label :new_match, "Getting a new match each week" %>
<%= user_preference.check_box :new_match, class: "checkbox new_match_email" %>
</div>
<div class="email-holder">
<%= user_preference.label :match_reminder, "New matches Thursday reminder", class: "match_reminder_email" %>
<%= user_preference.check_box :match_reminder, class: "checkbox thursday_reminder_email" %>
</div>
<div class="email-holder">
<%= user_preference.label :accepted_match, "A Glassbreakers accepted a match", class: "accepted_match_email" %>
<%= user_preference.check_box :accepted_match, class: "checkbox accept_match_email" %>
</div>
<div class="email-holder">
<%= user_preference.label :new_message, "Received a new message" %>
<%= user_preference.check_box :new_message, class: "checkbox new_message_email" %>
</div>
</div>
<% end %>
<h4 class="connect-label">Connections</h4>
<div class="connections info-holder">
<p class="inform">You'll receive new matches every Tuesday. Make sure to respond to your matches before then.</p>
<div class="pausing">
<label><%= t("edit_user.settings.pausing_header") %></label>
<%= react_component(
"MatchingPausedSetting",
{
matchingPaused: current_user.matching_paused?,
pauseMatchingURL: user_matching_pauses_path(current_user)
}
) %>
</div>
<p class="setting-descrip pause-descrip">Pausing connections means you will not receive new potential connections each week. You will be able to send and receive new messages.</p>
</div>
<h4 class="contact-label">Contact</h4>
<div id="contact-info" class="info-holder">
<p class="inform">Have a question? We love hearing from you. Contact Courtney, our communication manager, at <a href="mailto:[email protected]" target="_top">[email protected]</a>.</p>
</div>
</div>
контроллер пользователя, относящийся к user_params
def user_params
filtered_params = params.require(:user).permit(
:email,
:mobile,
:bio_because,
:bio_meet,
:description,
:github_link,
:linkedin_link,
:title,
:twitter_link,
preference_attributes: [
:id,
:new_match,
:accepted_match,
:match_reminder,
:new_message,
],
user_onboard_skills_attributes: [
:skill_id,
:industry_id,
:years_experience,
:id,
:_destroy,
],
interest_ids: [],
)
filtered_params[:user_onboard_skills_attributes] =
filter_user_onboard_skills_attributes(
filtered_params[:user_onboard_skills_attributes]
)
filtered_params
end
Привет @ BK22 - когда я обновил вышеуказанные рекомендации, я получил ошибку «неопределенный метод' MODEL_NAME»для ноль: NilClass " – LMo
Было бы полезно, если бы вы разместили весь вид формы и метод контроллера. Из этой ошибки это звучит так, как будто у пользователя нет предпочтения, связанные с ним. – BK22
Добавлена полная форма, которая имеет частичную форму настроек, которая включает вложенные частичные. – LMo