gpt4 book ai didi

ruby-on-rails - rails : I cant pass a validation error in a redirect

转载 作者:行者123 更新时间:2023-12-04 02:48:01 25 4
gpt4 key购买 nike

所以这是一个简单的项目,里面有产品,你可以竞标。想想易趣。

我按如下方式构建了项目:

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

在我包含的每个产品的“展示” View 中
  • 产品详细信息(由脚手架生成)
  • 到目前为止的出价 list
  • 使用 form_for helper 提交新投标的表格

  • <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 %>

    单击“提交”后,会调用出价 Controller #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

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

    我在出价模型中有一个 validates_presence_of 验证。因此,如果用户将出价字段留空,则验证失败,出价 Controller crate 操作会呈现出价新 View 。包括错误信息。投标新 View 包括脚手架生成的代码“<% if @bid.errors.any? %> etc”

    我实际上想要做的而不是呈现新操作是将用户扔回产品展示页面,就像在成功出价时所做的那样,只是为了在产品展示页面上显示错误消息。基本上,这让用户感觉停留在产品展示页面上,而不是将它们扔到出价新页面上。

    我遇到的问题是如何将错误消息传回产品展示页面?如果我编辑出价 Controller 在上面创建操作代码并将“render action:'new'”行替换为
    redirect_to "/products/#{@bid.product_id}"

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

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

    PS - 我知道我需要将脚手架生成的代码 "<% if @bid.errors.any? %> ..."代码添加到产品显示 View 中,但我没有在上面的代码中这样做,因为它会导致NilMethod 错误,因为该错误不是为存在于其上的方法创建的。

    最佳答案

    你想要这样的东西

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

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

    关于ruby-on-rails - rails : I cant pass a validation error in a redirect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20368717/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com