1

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

У меня есть форма, где Пользователь может создать учетную запись. Каждому пользователю нужно поставить свою цифровую табличку, и автомобиль создается, если он еще не существует с этой номерной табличкой и назначается пользователю. В моей форме отображаются сообщения об ошибках проверки для пользователя, но не для автомобиля (он только отмечает поля ввода для цифровых знаков красного цвета).

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

Моя форма:

<%= form_for(@user, html: { multipart: true }) do |f| %> 
<%= render 'shared/error_messages', object: f.object %> 
<div class="row"> 
    <div class="col-xs-6 col-xs-offset-3"> 
     <%= render 'shared/error_messages', object: f.object %> 
     <%= f.label :name %> 
     <%= f.text_field :name, class: 'form-control' %> 

     <%= f.label :email %> 
     <%= f.email_field :email, class: 'form-control' %> 

     <%= f.label :password %> 
     <%= f.password_field :password, class: 'form-control' %> 

     <%= f.label :password_confirmation, "Bestätigung" %> 
     <%= f.password_field :password_confirmation, class: 'form-control' %> 
    </div> 
</div> 
<div class="row"> 
    <div class="col-xs-6 col-xs-offset-3"> 
     <%= f.fields_for :car, @car do |car| %> 
     <%= car.label :plateprefix, "Nummernschild" %> 
    <div class="form-inline"> 
     <%= car.text_field :plateprefix %> 
     <%= car.label :plate, "-" %> 
     <%= car.text_field :plate %> 
    </div> 
    <% end %> 
    </div>  
</div> 

user.rb:

class User < ActiveRecord::Base 
    belongs_to :car, inverse_of: :users 
    validates :name, presence: true, length: { maximum: 50 } 

car.rb:

class Car < ActiveRecord::Base 
    has_many :users, inverse_of: :car 
    accepts_nested_attributes_for :users 
    validates :plateprefix, presence: true 

и, наконец, мой контроллер автомобиля:

def new 
    @user = User.new 
    end 

    def create 
    if verify_recaptcha 
    @user = User.new(user_params) 
    if Car.exists?(:country => 'D', :plateprefix => params[:user][:car][:plateprefix].upcase, :plate => params[:user][:car][:plate].upcase) 
    @car = Car.find_by(:country => 'D', :plateprefix => params[:user][:car][:plateprefix].upcase, :plate => params[:user][:car][:plate].upcase) 
    @user.car_id = @car.id 
    else 
    @car = Car.new(:country => 'D', :plateprefix => params[:user][:car][:plateprefix].upcase, :plate => params[:user][:car][:plate].upcase) 
    @car.country = 'D' 
    @car.save 
    @user.car_id = @car.id 
    end 
    if @user.save 
     @user.send_activation_email 
     flash[:info] = "Please check your email to activate your account." 
     redirect_to root_url 
    else 
     @user = User.new 
     render 'new' 
    end 
    else 
    @user = User.new 
    render 'new' 
    end 
    end 
+0

В дополнение к моему вопросу: когда возникает ошибка, и поле числовых знаков становится красным, оно также разрушает мое форматирование. Обычно два поля находятся в строке с тире в середине (стандартное форматирование немецких числовых знаков), но с красной маркировкой он перемещает поля в две отдельные строки. Любой намек на это тоже поможет? – Peter

ответ

0

Итак, после того, как еще 2 дней чтения я ее решил:

Сначала я переехал accepts_nested_attributes из car.rb к user.rb (и от множественного числа, чтобы в единственном числе)

user.rb

accepts_nested_attributes for :car 

но потом по какой-то причине в моей форме я должен был изменить переменную в fields_for для множественного числа (: авто - некоторые из рельсов магии находится вне меня, но я получаю там я думаю)

Далее я также воссоздал мой контроллер, чтобы использовать методы обеспечивается ActiveModel/записи и пошел делать:

if Car.exists?(:country => 'D', :plateprefix => params[:user][:cars][:plateprefix].upcase, :plate => params[:user][:cars][:plate].upcase) 
@user.car = Car.find_by(:country => 'D', :plateprefix => params[:user][:cars][:plateprefix].upcase, :plate => params[:user][:cars][:plate].upcase) 
else 
@user.create_car(:country => 'D', :plateprefix => params[:user][:cars][:plateprefix].upcase, :plate => params[:user][:cars][:plate].upcase) 
end 

Так что это очищено мой код немного, и я, наконец, получил мои ошибки, чтобы показать правильно!

Смежные вопросы