Rails 5.1.2 Wicked Gem и вложенные атрибуты

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 мс) транзакция отката

введите здесь описание изображения


person GabrielTheCoder    schedule 02.09.2017    source источник
comment
i.stack.imgur.com/t56Zb.png это ссылка на консоль выход   -  person GabrielTheCoder    schedule 02.09.2017


Ответы (2)


Согласно документу Wicket:

class AfterSignupController < ApplicationController
  include Wicked::Wizard

  steps :confirm_password, :confirm_profile, :find_friends

  def show
    @user = current_user
    case step
    when :find_friends
      @friends = @user.find_friends
    end
    render_wizard
  end
end

В вашем контроллере должно быть где-то case step, которого я не вижу в вашем текущем коде.

Похоже на проблему с переадресацией

person Stephane Paquet    schedule 02.09.2017
comment
Спасибо за помощь. я добавил материал шага case в свой контроллер, но перенаправление все еще не работает, и я не могу понять, почему. также я должен сделать @account_information = @user.build_account_information в своем контроллере шагов, если я удалю build_ форма не будет отображаться - person GabrielTheCoder; 03.09.2017
comment
добавьте один отладчик в свой код (старая школа logger.debug MESSAGE, чтобы проверить, что происходит в вашем приложении. - person Stephane Paquet; 03.09.2017
comment
я не добился никакого успеха: я просто не могу понять, что блокирует мой код. может это маршрут? я должен сделать std как resources :user do resources :account_information end в моих маршрутах, или это что-то вроде d.fields_for :account_information_attributes в моей вложенной форме? - person GabrielTheCoder; 06.09.2017
comment
Не похоже, что они связаны с полями, так как они не имеют никакого отношения к маршрутизации. Судя по предоставленной вами информации, это похоже на проблему с маршрутизацией. routes.rb или ваш контроллер может переопределить ожидаемое поведение - person Stephane Paquet; 06.09.2017
comment
я понятия не имею : / я просто не могу понять, что происходит не так. у моего route.rb был resources :account_information, но даже с его удалением нет никакой пользы. - person GabrielTheCoder; 06.09.2017
comment
Попробуйте добавить сообщение logger.debug, чтобы отслеживать, куда вы идете. Также используйте свой браузер, чтобы указать URL-адреса страниц и сравнить то, что вы испытываете, с тем, что у вас есть на самом деле. - person Stephane Paquet; 06.09.2017
comment
Размещение нескольких сообщений в вашем контроллере поможет понять поток и что не так - person Stephane Paquet; 06.09.2017
comment
я нашел проблему. я обновлю свой пост, чтобы показать вам, что было не так! Спасибо за помощь! - person GabrielTheCoder; 14.09.2017

Я нашел решение. проблема заключалась в отсутствующем действии создания и некоторых других вещах. я отредактировал пост, чтобы вы могли прочитать его

person GabrielTheCoder    schedule 13.09.2017
comment
неважно ... вещи просто больше не работают ... иногда я не понимаю рельсы. - person GabrielTheCoder; 14.09.2017
comment
stackoverflow .com/questions/17175850/ это помогло - person GabrielTheCoder; 14.09.2017