【问题标题】:My code is skipping the View and going into controller directly. ruby on rails我的代码正在跳过视图并直接进入控制器。铁轨上的红宝石
【发布时间】:2016-04-05 13:31:05
【问题描述】:

我的看法

<h1>Return a Book</h1>
<%= form_tag("/orders/returnB", method: "get") do %>
  <div class="form-group">
    <%= label_tag :ID, "ID" %>
    <%= text_field_tag :ID, nil, class: "form-control" %>
  </div>
  <%= submit_tag "Submit", class: "btn btn-default" %>
<% end %>

我的控制器

def returnB
  getid = params[:ID]
  @order = Order.find(getid)
  @order.destroy
  respond_to do |format|
    format.html { redirect_to orders_url, notice: 'Order was destroyed.' }
    format.json { head :no_content }
  end
end

它只是直接进入控制器,因为我的控制器无法获取 id,所以它给出了一个错误。所以我在我的路线上这样做:

get 'orders/return' =&gt; 'orders#returnB'

【问题讨论】:

  • “直接进入控制器”是什么意思?一切都首先进入控制器。你打的是什么网址?你的路由是什么样的?我也强烈考虑坚持正常的参数命名约定。并正确缩进。
  • 那是因为您已将其路由到控制器的returnB 方法。 Rails 总是会首先点击控制器。您也不应该使用获取请求来销毁订单。您能解释一下您要实现的功能吗?您想显示视图,然后用户填写表单并在提交时销毁订单?
  • 鉴于您提到方法::get 并在控制器中执行一些销毁操作
  • 然后给出一个错误 id not found?
  • 是的,因为我从视图中获取了 ID,然后我找到了具有该 ID 的订单,然后将其销毁。

标签: ruby-on-rails ruby ruby-on-rails-3.2


【解决方案1】:

在一个简单的 Rails 流中,请求首先到达控制器,然后呈现与控制器同名的视图模板。

我认为您的表单已在

中定义
view/orders/returnB.erb

这就是请求在呈现表单之前首先到达控制器的原因。我建议您将表单移到其他视图模板中。

【讨论】:

  • 否则我应该把它放在哪里。它会给出缺少模板的错误。
  • 您可以通过将流程重定向到不同的控制器或指定不同视图模板的渲染路径来防止默认行为。您能否详细描述您在这里想要实现的目标?您的视图目录中还有哪些其他视图模板?
【解决方案2】:

将您的路线更改为:

delete 'orders/return' => 'orders#return_order'

delete应该用来销毁。

将表格更改为:

<h1>Return a Book</h1>
<%= form_tag("/orders/return", method: "delete") do %>
 <div class="form-group">
  <%= label_tag :ID, "ID" %>
  <%= text_field_tag :ID, nil, class: "form-control" %>
 </div>
<%= submit_tag "Submit", class: "btn btn-default" %>
<% end %>

将操作名称从returnB 更改为return_order,因为编写方法名称不是正确的约定。

将控制器代码更改为:

def return_order
  @order = Order.find_by_id(params[:ID])
  @order.destroy
  respond_to do |format|
    format.html { redirect_to orders_url, notice: 'Order was destroyed.' }
    format.json { head :no_content }
  end
end

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 2011-07-13
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多