Rails:我无法在重定向中传递验证错误

2024-03-23

所以这是一个简单的项目,其中有产品,您可以对其进行投标。想想易趣。

我构建的项目如下:

$ rails new routetest
$ rails g scaffold product productname reserveprice:integer
$ rails g scaffold bid bidprice:integer product_id

在我包含的每个产品的“显示”视图上

  • 产品详细信息(由脚手架生成)
  • 迄今为止的投标清单
  • 使用 form_for 助手提交新投标的表单

<p id="notice"><%= notice %></p>
<h2>Normal Products\Show Part</h2>
<p>
  <strong>Productname:</strong>
  <%= @product.productname %>
</p>
<p>
  <strong>Reserveprice:</strong>
  <%= @product.reserveprice %>
</p>
<%= link_to 'Back', products_path %>
<br /><br />

<h2>List of bids</h2>
<table>
  <thead>
    <tr>
      <th>Product ID</th>
      <th>Bid Price</th>
    </tr>
  </thead>
  <tbody>
    <% @bids.each do |bid| %>
      <tr>
        <td><%= bid.product_id %></td>
        <td><%= bid.bidprice %></td>
      </tr>
    <% end %>       
  </tbody>
</table>
<br /><br />

<h2>Form For Bids</h2>
<h4>Make a Bid</h4>
<%= form_for(@bid) do |b| %>
  <div class="field">
    <%= b.number_field :bidprice %>
  </div>
  <div>
    <%= b.hidden_field :product_id, :value => (params[:id]) %>
  </div>
  <div class="actions">
    <%= b.submit %>
  </div>
<% end %>

单击“提交”后,将调用出价控制器#create 操作。

  def create
    @bid = Bid.new(bid_params)
      if @bid.save
        redirect_to "/products/#{@bid.product_id}", notice: 'Bid was successfully created.' 
      else
        render action: 'new' 
      end
  end

因此,成功的出价将使用户返回到产品展示视图,并将记录添加到页面的出价部分。

我在出价模型中有一个 validates_presence_of 验证。因此,如果用户将出价字段留空,则验证失败,并且出价控制器 crate 操作将呈现出价新视图。包括错误消息。出价新视图包括脚手架生成的代码“ 等”

我实际上想做的不是呈现新操作,而是将用户返回到产品显示页面,就像成功出价时所做的那样,仅在产品显示页面上显示错误消息。基本上,这给用户一种留在产品展示页面上的感觉,而不是把他们扔到出价新页面上。

我遇到的问题是如何将错误消息传递回产品展示页面?如果我编辑出价控制器,请在上面创建操作代码,并将“渲染操作:‘新’”行替换为

redirect_to "/products/#{@bid.product_id}"

然后用户返回到页面,但错误消息未传递。我认为这是因为错误消息被存储为新操作(出价控制器)渲染的一部分

所以我的问题是我如何实现我想做的事情?返回产品显示视图并显示来自验证失败的错误消息。谢谢。

PS - 我知道我需要将脚手架生成的代码“ ...”代码添加到产品显示视图中,但我没有在上面的代码中这样做,因为它会导致NilMethod 错误,因为该错误不是为该方法存在而创建的。


你想要这样的东西

redirect_to product_path(@bid.product_id), :flash => { :error => @bid.errors.full_messages.join(', ') }

这将重定向到产品页面,但将错误作为闪存消息传递。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails:我无法在重定向中传递验证错误 的相关文章

随机推荐