Ruby: 2.4.0
Rails: 5.1.2
Привет, ребята, я не совсем новичок в Rails, но определенно не эксперт.
Я пытаюсь создать злого волшебника с вложенными атрибутами.
Я уже искал через Google, GitHub и StackOverflow, но не нашел ничего, кроме этого и что.
Оба не работают.
У меня есть следующее:
-_-_-_-_-_-_-_-_-_-_-_-_-_ РЕДАКТИРОВАТЬ !!!-_-_-_-_-_-_-_ -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
Проблема заключалась в том, что я не определил действие создания --- мне также пришлось изменить имена некоторых переменных. На мой взгляд, рельсы иногда немного сбивают с толку множественное число. к счастью, он наконец-то смог сделать эту супер простую вещь :D
Модели
user.rb (из драгоценного камня разработки)
class User < ApplicationRecord
has_one :accountinfo
accepts_nested_attributes_for :accountinfo, update_only: true
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
validates_presence_of :password, :email, :accounttype
end
account_information.rb
редактировать: accountinfo.rb
Модель, в которой я хочу хранить информацию о пользователе, чтобы не перегружать мою пользовательскую таблицу (все хорошо отсортировано)
class AccountInformation < ApplicationRecord
belongs_to :user
end
Я использовал злой пару раз, и он всегда работает, но только если я храню всю информацию в пользовательской модели... чего я не хочу делать на этот раз из-за лучшей структуры и прочего.
Контроллер
users_controller.rb
class UsersController < ApplicationController
def index
redirect_to root_path
end
def create
@user = User.create( user_params )
end
def show
@user = User.find(params[:id])
if user_signed_in?
render 'show'
else
redirect_to root_path
end
end
private
def user_params
params.require(:user).permit(:first_name, :accounttype, :accountinfo, accountinfos_attributes:[:user_id, :competence])
end
end
user_steps_controller
class UserStepsController < ApplicationController
include Wicked::Wizard
steps :welcome
before_action :authenticate_user!
def show
@user = current_user
render_wizard
end
def create
@accountinfo = @user.accountinfo.create(user_params)
end
def update
@user = current_user
@user.update(user_params)
render_wizard @user
end
private
def user_params
params.require(:user).permit(:accountinfo,accountinfo_attributes:[:id, :competence])
end
private
def redirect_to_finish_wizard_path
redirect_to root_path, notice: "Danke für deine Zeit!"
end
end
private
def user_params
params.require(:user).permit(:accounttype,
account_information_attributes:[:id, :competence])
end
private
def redirect_to_finish_wizard_path
redirect_to root_path, notice: "Danke für deine Zeit!"
end
end
Просмотры
добро пожаловать.html.erb
<%= form_for @user, url: wizard_path do |f| %>
<%= f.fields_for(:accountinfo) do |builder| %>
<div class="m-wizard__choose2 m-wizard__choose2--border-right">
<label>
<%= builder.radio_button :competence, 1, class: "input-hidden" %>
<i class="icon-people-male h1"></i>
<p class="h6 m-text--bold">Designer</p>
</label>
</div>
<div class="m-wizard__choose2">
<label>
<%= builder.radio_button :competence, 2, class: "input-hidden" %>
<i class="icon-people h1"></i>
<p class="h6 m-text--bold">Texter</p>
</label>
</div>
<% end %>
<div class="m-text--center">
<%= f.submit "Weiter", class: "m-button" %>
</div>
<% end %>
Может быть, вы уже нашли что-то...
Я хочу, чтобы мой пользователь заходил на welcome.html.erb после регистрации.
devise работает хорошо, перенаправление на злой контроллер тоже. wicked работает правильно, как всегда, маршруты также настроены правильно, но на этот раз я хочу, чтобы моя информация «competence» сохранялась в связанной таблице account_information.
После того, как я нажимаю кнопку «Weiter» («продолжить» на немецком языке), ничего не происходит, кроме повторного рендеринга сайта. Вот что выводит моя консоль:
Обработка с помощью UserStepsController#update as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"uYRJyCeBGyyDcWUtIj62fmT9oMpTnUQ3p+CSi3n8tSKKLguB1j/CPZaeuZCcmpCoBjJDKY6yz7/Z2wXfAO7YBg==", "user"==", "user"==", "user"==","user" "=>"1"}}, "commit"=>"Weiter", "id"=>"welcome"} Пользовательская загрузка (0,3 мс) SELECT "users".* FROM "users" WHERE "users"."id знак равно ЗАКАЗАТЬ ПО "users"."id" ПРЕДЕЛ ASC ? [["id", 12], ["LIMIT", 1]] (0,0 мс) начать транзакцию Загрузка информации об учетной записи (0,1 мс) ВЫБЕРИТЕ "account_informations".* ИЗ "account_informations" ГДЕ "account_informations"."user_id" = ? ПРЕДЕЛ ? [["user_id", 12], ["LIMIT", 1]] (0,1 мс) транзакция отката (0,0 мс) начало транзакции (0,0 мс) транзакция отката