Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:无法在另一个局部视图中使用局部视图_Ruby On Rails_Views - Fatal编程技术网

Ruby on rails Rails:无法在另一个局部视图中使用局部视图

Ruby on rails Rails:无法在另一个局部视图中使用局部视图,ruby-on-rails,views,Ruby On Rails,Views,我试图在另一个部分视图中包含模型请求的部分表单 我有一个名为request的模型 class CreateRequests < ActiveRecord::Migration[5.0] def change create_table :requests do |t| t.string :name t.string :email t.string :phone t.string :product t.string :de

我试图在另一个部分视图中包含模型
请求的部分表单

我有一个名为
request
的模型

class CreateRequests < ActiveRecord::Migration[5.0]
  def change
    create_table :requests do |t|
      t.string :name
      t.string :email
      t.string :phone
      t.string :product
      t.string :details
      t.timestamps
    end
  end
end 
表单部分我有
请求/_form.html.erb

<%= form_for(request) do |f| %>
  <% if request.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(request.errors.count, "error") %> prohibited this request from being saved:</h2>

      <ul>
      <% request.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :name %>
    <%= f.text_field :name %>
  </div>

  <div class="field">
    <%= f.label :email %>
    <%= f.text_field :email %>
  </div>

  <div class="field">
    <%= f.label :phone %>
    <%= f.text_field :phone %>
  </div>

  <div class="field">
    <%= f.label :product %>
    <%= f.text_field :product %>
  </div>

  <div class="field">
    <%= f.label :details %>
    <%= f.text_field :details %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>
但是我得到了一个错误:

NoMethodError in Products#bigmikepopular113
Showing /Users/beckah/Documents/projects/Envirovacs/app/views/requests/_form.html.erb where line #1 raised:

undefined method `model_name' for #<ActionDispatch::Request:0x007fee89b49040>
Extracted source (around line #1):
1
2
3
4
5
6

<%= form_for(request) do |f| %>
  <% if request.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(request.errors.count, "error") %> prohibited this request from being saved:</h2>

      <ul>
产品中的命名错误#bigmikepopular113
显示/Users/beckah/Documents/projects/Envirovacs/app/views/requests/_form.html.erb,其中第1行出现:
未定义的方法“model_name”#
提取的源(第1行附近):
1.
2.
3.
4.
5.
6.
禁止保存此请求:
Products#bigmikepopular113
是包含原始部分的控制器视图,因此基本上结构是

products/bigmikepopular113.html.erb
->
static\u pages/\u requestquote.html.erb
->
requests/\u form.html.erb

<%= form_for(request) do |f| %>
  <% if request.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(request.errors.count, "error") %> prohibited this request from being saved:</h2>

      <ul>
      <% request.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :name %>
    <%= f.text_field :name %>
  </div>

  <div class="field">
    <%= f.label :email %>
    <%= f.text_field :email %>
  </div>

  <div class="field">
    <%= f.label :phone %>
    <%= f.text_field :phone %>
  </div>

  <div class="field">
    <%= f.label :product %>
    <%= f.text_field :product %>
  </div>

  <div class="field">
    <%= f.label :details %>
    <%= f.text_field :details %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

我可以做些什么来确保我可以有一个嵌入的部分?

从我所看到的,您没有在任何地方初始化新请求的创建。仅在控制器内的新操作下,但没有与该操作对应的视图。您只有视图_form.html.erb

澄清:控制器中的每个操作都必须对应于一个视图,与控制器中的操作同名。即使是局部的

因此,
defnew
自动指向new.html.erb<代码>定义索引
到index.html.erb等

你有两个选择。在控制器内创建
def表单
,并相应地在routes.rb中设置路由,或者直接在视图内而不是在控制器中编写语句:

删除:

<%= form_for(request) do |f| %>

相反:

<%= form_for Request.new do |f| %>


希望这会有所帮助。

从我看到的情况来看,您没有在任何地方初始化新请求的创建。仅在控制器内的新操作下,但没有与该操作对应的视图。您只有视图_form.html.erb

澄清:控制器中的每个操作都必须对应于一个视图,与控制器中的操作同名。即使是局部的

因此,
defnew
自动指向new.html.erb<代码>定义索引到index.html.erb等

你有两个选择。在控制器内创建
def表单
,并相应地在routes.rb中设置路由,或者直接在视图内而不是在控制器中编写语句:

删除:

<%= form_for(request) do |f| %>

相反:

<%= form_for Request.new do |f| %>

希望这会有帮助