渲染form_for部分视野

时间:2017-04-06 19:39:24

标签: ruby-on-rails ruby forms render partial

提前感谢您提供的任何帮助。我试过研究这一组,但我无法让它工作。

尝试在pages / home.html.erb中呈现contacts / _new.html.erb时 我得到“形式中的第一个参数不能包含零或空”

我认为这与Rails控制的控制器有关。 即使主视图来自PagesController,Rails是否知道查看我的ContactsController?我尝试了很多东西,并对此进行了很多研究。我尝试了当地人,改变了网址和行动。当它不是部分时它起作用。它在我硬编码form_for Contact.new时有效。

再次感谢!

 _new.html.erb 

  <%= form_for @contact do |f| %>
   <div class="form-group">
    <%= f.label :name %>
    <%= f.text_field :name, class: 'form-control' %>
   </div>
   <div class="form-group">
    <%= f.label :email %>
    <%= f.text_field :email, class: 'form-control' %>
   </div>
   <div class="form-group">
    <%= f.label :comments %>
    <%= f.text_area :comments, class: 'form-control' %>
   </div>
   <%= f.submit 'Submit',class: 'btn btn-default' %>
  <% end %>


    class ContactsController < ApplicationController
      def new
        @contact = Contact.new
      end

      def create
       @contact = Contact.new(contact_params)
      if @contact.save
       redirect_to root_path, notice: "Message sent."
      else
       redirect_to root_path, notice: "Error occured."
      end
    end
  private
   def contact_params
    params.require(:contact).permit(:name, :email, :comments)
   end
  end

  Render with: 
  <%= render new_contact_path %>
  in the views/pages/home.html.erb

1 个答案:

答案 0 :(得分:1)

这是因为@contactpages_controller.rb并不存在,并且目前要在form_for中加载联系人变量,会引发此错误。

您只在contacts_controller中定义了它,但在加载pages/home视图时未访问它,它会去寻找@contact您的pages_controller方法中home中定义的变量。

尝试将其添加到pages_controller.rb中:

# app/controllers/pages_controller
def home
  @contact = Contact.new
end