【问题标题】:Rails 3 Render => New with ParameterRails 3 Render => New with Parameter
【发布时间】:2011-06-08 00:56:31
【问题描述】:

我读过: Rails: Pass parameters with 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 %>

感谢任何帮助。我已经转了几个小时了。

【问题讨论】:

    标签: forms ruby-on-rails-3 new-operator render


    【解决方案1】:

    我认为您的“创建”方法的 else 子句需要大致反映您的“新”方法,这意味着再次从您的 params 哈希填充 @category

    所以首先确保您的隐藏字段已填充,然后在提交表单时检查params 的内容。 category_id 应该在那里,如果保存失败,您需要像在“新”中一样再次抓取它。

    【讨论】:

    • 谢谢,我把@category 移到了else 语句中,我可以从环境转储中看到create controller 中的@category 变量不是nil。但是,该值仍然没有通过渲染,并且错误消息保持不变。还有其他想法吗?
    • 更新:重新输入所有内容后。新参数是正确的,但在 else 渲染中,参数应该是 @category= [:review][:category_id]。感谢您的帮助。
    猜你喜欢
    • 2022-12-27
    • 2022-12-04
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    相关资源
    最近更新 更多