Ассоциация!Почему так ноль? - PullRequest
0 голосов
/ 11 марта 2012

Я пытаюсь связать эти модели с действием по созданию бара.

Я знаю, что и бар, и тип являются нулевыми объектами, которые еще не созданы,но почему, рубин не понимает, что все, что я хочу, это просто связать эти ноль объектов?

Итак, я искал ответы, но никто из них не объяснил, почему эта ошибка: Called idдля nil, который по ошибке будет равен 4 - если вы действительно хотите идентификатор nil, используйте object_id

в этой ситуации.

Пользователь - Модель

has_one :bar

Бар - Модель

belongs_to :type
belongs_to :user

Тип - Модель

has_many :bars

Бар -Контроллер

  def new
      @bar = Bar.new
    end

    def create
      @bar = current_user.build_bar(params[:bar].merge(:type_id => @type.id))
           if  @bar.save     
           flash.now[:success] = "Wohoo!"
             redirect_to @bar
            else
             render  :new 
           end
         end

New_bar - Просмотр

<div class="block">

        <%= render 'shared/flash_messages' %>

        <%= form_for @bar, :url =>  bars_path, :method => :post  do |b| %>
    <ul>
    <li><%= b.label :name %><%= b.text_field :name %></li>

    <%= b.fields_for :type  do |t| %>

    <li>pirate:<%= t.radio_button :style, "pirate" %></li>
    <li>pub:<%= t.radio_button :style, "pub" %></li>
    <li>american:<%= t.radio_button :style, "american" %></li>
    </ul>
    <% end %>

    <%= b.submit "create", :class => "sec button" %>
    <% end %>
    </div>

1 Ответ

1 голос
/ 11 марта 2012

Попробуйте построить объект bar следующим образом:

@bar = current_user.bar.new params[:bar].merge(:type_id => @type.id)

Убедитесь, что у вас есть и объект current_user, и объект @type при вызове этой строки.

Для записи единственная разница между current_user.bar.new и current_user.bar.build заключается в том, что build добавляет вновь созданный объект bar в коллекцию пользователя перед его сохранением (где new не добавит объект пользователю, пока он не будет сохранен).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...