gpt4 book ai didi

ruby-on-rails - Rails Controller 触发 If-Else 语句的两个分支

转载 作者:太空宇宙 更新时间:2023-11-03 16:46:31 24 4
gpt4 key购买 nike

我是新来的,所以我希望新帐户可以直接提问。我使用 Rails 已经有一段时间了,通常我很擅长研究和解决我自己的问题 - 但这个问题让我困惑了几天。

我在 Controller 中调用了一个创建操作,该操作包含一个 if-else 语句,该语句是基于 check_box post 参数的条件语句。我可以看到参数被发布到 Controller ,所以语句应该能够正确分支,但发生了一些奇怪的事情。 Controller 执行语句的两个分支,但因为我的参数根据该复选框进行了修整,所以第二个分支总是出错。我相当有信心这与路线无关。

请看下面我的代码:

Controller :

  def create
@quote = Quote.find(params[:quote_id])

if params[:quote_item][:custom] == 1
@quote_item = @quote.quote_items.new(quote_item_params)
@quote_item.rate = nil
@quote_item.custom = true
@quote_item.unit_price = params[:quote_item][:unit_price]
@quote_item.rate_name = params[:quote_item][:title]
else
@quote_item = @quote.quote_items.new(quote_item_params)
@quote_item.custom = false
@rate = Rate.find(params[:quote_item][:rate_id])
@quote_item.unit_price = @rate.price
@quote_item.rate_name = @rate.product.name
end

respond_to do |format|
if @quote.save
format.html { redirect_to @quote, notice: 'Quote item was successfully added.' }
format.json { render :show, status: :created, location: @quote }
else
format.html { redirect_to @quote }
format.json { render json: @quote.errors, status: :unprocessable_entity }
end
end

查看:

    <% if @rates.any? %>
<%= bootstrap_form_for([@quote, @quote_item], layout: :inline) do |f| %>
<%= f.text_field :title, class: 'input-sm', hide_label: true, :placeholder => "Line Title" %>
<%= f.select(:rate_id, @rates.collect {|r| [r.select_summary_text, r.id ] }, { hide_label: true }, { :class => 'input-sm' }) %>
<%= f.number_field :quantity, class: 'input-sm', hide_label: true, :min => 1, :length => 2, :value => 1 %>
<%= f.text_field :unit_price, class: 'input-sm', hide_label: true, :min => 1, :length => 2, :prepend => "$" %>
<%= f.text_field :note, class: 'input-sm', hide_label: true, :placeholder => "Note (Optional)" %>
<%= f.submit "Add Quote Item", class: 'btn btn-sm btn-default' %>
<%= f.check_box :custom, label: "Override" %>
<% end %>
<% else %>
<div class="well well-sm"><i class="fa fa-usd"></i> No pricing for this customer has been set. Set product pricing for this jobs customer <%= link_to user_path(@quote.job.user) do %>here.<% end %></div>
<% end %>

我的创建方法错误在这里:

@rate = Rate.find(params[:quote_item][:rate_id])

与:

ActiveRecord::RecordNotFound (Couldn't find Rate with 'id'=):

app/controllers/quote_items_controller.rb:19:在“创建”中

这个错误是正确的,因为速率 ID 没有在 if-else 语句的第一个分支中处理。我尝试了不同的复选框表单字段,直接覆盖“自定义”并且两个分支仍在运行。

非常感谢这里的任何帮助!

最佳答案

params 哈希包含字符串。

尝试交换:

if params[:quote_item][:custom] == '1'

对于你的原创:

if params[:quote_item][:custom] == 1

关于ruby-on-rails - Rails Controller 触发 If-Else 语句的两个分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31777606/

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