Ruby неопределенный метод `ошибки 'с ассоциациями has_many -> own_to - PullRequest
0 голосов
/ 02 мая 2018

Я пересмотрел код из 200 раз. Может быть, я могу помочь вам найти волшебника, который сломает целое. Я создаю запись в комнате, которая связана с отелем, но также и с учетной записью. У меня нет проблем с записью данных. Пока я не передам данные через проверку. Когда проверка также выполняется, данные сохраняются, но когда я не хочу соответствовать их ожиданиям, естественно высвечивать ошибки, но, к сожалению, я не могу найти метод ошибки.

неопределенный метод "ошибки" для Room :: ActiveRecord_Associations_CollectionProxy: 0x00007ff8b2a36530

                            <% if @room.errors.full_messages.any? %>
                                <div class="error_explanation">
                                    <h2><%= t('other.errors', :count => @room.errors.full_messages.size) %></h2>
                                    <ul>
                                    <% @room.errors.full_messages.each do |error_message| %>
                                        <li><%= error_message  %></li>
                                    <% end %>
                                    </ul>
                                </div>
                            <% end %>

Мой контроллер

def new
        @account = Account.find(current_user.account_id)
        @room = @account.rooms.new

        @hotels = @account.hotels.all

        rescue ActiveRecord::RecordNotFound
            flash[:error] = "#{t 'alerts.Not_found'}"
            redirect_to(rooms_manages_path)
    end

    def create
        @account = Account.find(current_user.account_id)
        @room = @account.rooms

        @hotels = @account.hotels.all

        if @room.create(room_params).valid?
          flash[:success] = "#{t 'alerts.Is_save'}"
          redirect_to(rooms_manages_path)
        else
          flash[:warning] = "#{t 'alerts.If_save'}"
          render 'new'
        end

        rescue ActiveRecord::RecordNotFound
            flash[:error] = "#{t 'alerts.Not_found'}"
            redirect_to(rooms_manages_path)
    end

Моя модель

class Room < ApplicationRecord

    belongs_to :account
    belongs_to :hotel
    has_many :reservations

    mount_uploaders :images, ImagesroomUploader
    serialize :images, JSON # If you use SQLite, add this line.

    validates :name, presence: true

end

class Account < ApplicationRecord

    has_many :users, inverse_of: :account, dependent: :destroy
    has_many :hotels
    has_many :rooms
    has_many :offers
    has_many :reservations
    has_many :widgets
    has_many :accountsinvoices
    has_many :accountspayments

end

Мой взгляд

<%= form_for(:room, :url => rooms_manages_create_path(), :html => {:id => "form"}) do |f| %>

                                <% if @room.errors.full_messages.any? %>
                                    <div class="error_explanation">
                                        <h2><%= t('other.errors', :count => @room.errors.full_messages.size) %></h2>
                                        <ul>
                                        <% @room.errors.full_messages.each do |error_message| %>
                                            <li><%= error_message  %></li>
                                        <% end %>
                                        </ul>
                                    </div>
                                <% end %>

                                <%= render(:partial => "form", :locals => {:f => f}) %>

                                <div class="text-left">
                                <%= submit_tag("#{t 'other.actions.save'}", class: 'btn btn-primary') %>
                                </div>

                                <% end %>

1 Ответ

0 голосов
/ 02 мая 2018

Ваше create действие устанавливает @room в коллекцию

@room = @account.rooms

отсюда ваше сообщение об ошибке в представлении. Вместо этого попробуйте

# some code ommitted ...
@room = @account.rooms.create(room_params)
@hotels = @account.hotels.all
if @room.valid?
# some code ommitted ...
...