在视图中呈现 form_for 部分

render form_for partial in view

提前感谢您提供的任何帮助。我已经尝试对此进行了大量研究,但我无法让它发挥作用。

当试图在 pages/home.html.erb 中呈现 contacts/_new.html.erb 时 我得到 "First argument in form cannot contain nil or be empty"

我认为这与 Rails 正在查看的控制器有关。 即使主视图来自 PagesController,Rails 是否知道查看我的 ContactsController?我已经尝试了很多东西并且对此进行了很多研究。我试过当地人并改变 url 和行动。当它不是部分时它起作用。当我硬编码 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

这是因为 @contact 在您的 pages_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