Ошибка обработки w / form_for в связанном ресурсе - PullRequest
0 голосов
/ 14 марта 2011

Я не могу заставить поток работать прямо здесь.У меня есть приложение Ruby on Rails (2.3.9).Для целей этого вопроса у нас есть только пара ресурсов.Boxes и Messages.

Box has_many :messages
Message belongs_to :box

Я создал представление, расположенное в /boxes/1/new_message, где у меня есть приведенный ниже код form_for.Я могу успешно создать сообщение из этого представления.Проблема возникает, когда мои проверки вступают в силу.

В этом случае message.body не может быть пустым и подтверждается message.rb.Как только эта проверка происходит, пользователь переходит к действию Message.new, и после успешного заполнения message.body приложение больше не может найти @box.id для размещения в message.box_id.

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

/ views / boxes / new_message.html.erb

<% form_for [@box, Message.new] do |f| %>
  <%= f.error_messages %>

  <%= f.label :message_title %>
  <%= f.text_field (:title, :class => "textfield-message grid_12 alpha") %>

  <%= f.label :message_body %>
  <%= f.text_area (:body, :class => "textarea-message grid_12 alpha ") %>

  <%= f.submit "Add a Message", :class => 'input boxy' %>       
<% end %>

messages_controller.rb

  def create
    @message = Message.new(params[:message])

    @box = Box.find(params[:box_id])
    @message = @box.messages.build(params[:message])
    @message.user = current_user

    respond_to do |format|
      if @message.save
        flash[:notice] = 'Message was successfully created.'
        format.html {redirect_to @box }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @flash.errors, :status => :unprocessable_entity }
      end
    end
  end

  def new
    @message = Message.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @message }
    end
  end

1 Ответ

1 голос
/ 14 марта 2011

Я считаю, что ваши

@box = Box.find(params[:box_id])

должны быть

@box = Box.find(params[:id])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...