Rails 3 Render => Новый с параметром - PullRequest
2 голосов
/ 12 января 2011

Я читал: Rails: передать параметры с render: action? , но у меня все еще проблемы.

Мой URL для новой страницы: http://localhost:3000/submit?category_id=2. Отправка формы в первый раз работает без каких-либо проблем, но если создание не удается и контроллер отображает новую страницу, я получаю сообщение об ошибке, не могу найти категорию без id, потому что параметр не передается.

Вот краткая версия new.html.erb и контроллеров new / create

def new
    ...
    @category = params[:category_id]
    @title = "Submit a review"
  end

  def create
    ....
    if @review.save
      flash[:success] = "New a Created"
      redirect_to user_path(@user)
    else
      @title = "New Review"
      render :action => 'new', :category_id => @category     
    end
  end

В строке 1 приведена ошибка.

<h1>Blah, blah, blah<%= "best #{Category.find(@category).name}" %></h1>
<br />
<%= form_for(...) do |f| %>
  <%= render 'shared/error_messages', :object => f.object %>
  <tr>
    <td> <%= select_tag(... %></td>
    <td><%= collection_select(...) %><br /> %></td>
    <td><%= f.text_field ... %></td>
  </tr>
</table>
        <%= f.hidden_field :category_id, :value=>@category %>
<div class="actions">
      <%= f.submit "Add" %>
 </div>
<% end %>

Любая помощь приветствуется. Я ходил в кругах часами.

1 Ответ

1 голос
/ 12 января 2011

Я думаю, что условие else вашего метода 'create' должно приблизительно зеркально отразить ваш 'new' метод, что означает повторное заполнение @category из вашего params хеша.

Итак, сначала убедитесь, что ваше скрытое поле заполнено, а затем проверьте содержимое params при отправке формы. category_id должен быть там, и вам нужно будет снова захватить его, как вы это делали в 'new', если сохранение не удалось.

...