在不同的控制器(未嵌套)中局部渲染表单

| 我有两个使用生成脚手架生成的模型,一个是LogBook,另一个是LogEntry。我想在LogBook显示页面上为LogEntry呈现部分表单。当我在局部上调用render时,出现此错误:
undefined method `model_name\' for NilClass:Class
我认为这是因为默认_form使用了一个实例变量,当从单独的控制器调用该实例变量时该实例变量不存在。因此,我尝试将LogEntry _form.html.erb转换为使用局部变量,并通过render调用将其传递给它们。在这之后是错误:
Model LogEntry does not respond to Text
如何将这部分内容通过其他控制器添加到显示页面中? 楷模:
class LogBook < ActiveRecord::Base
  belongs_to :User
  has_many :LogEntries, :dependent => :destroy
end

class LogEntry < ActiveRecord::Base
  belongs_to :LogBook, :class_name => \"log_book\", :foreign_key => \"log_book_id\"
end
LogEntry _form.html.erb(使用局部变量):
<%= form_for(log_entry) do |f| %>
  <% if log_entry.errors.any? %>
    <div id=\"error_explanation\">
      <h2><%= pluralize(log_entry.errors.count, \"error\") %> prohibited this log_entry from being saved:</h2>

      <ul>
      <% log_entry.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class=\"field\">
    <%= f.label :Text %><br />
    <%= f.text_field :Text %>
  </div>
  <div class=\"actions\">
    <%= f.submit %>
  </div>
<% end %>
LogBook show.html.erb:
<p id=\"notice\"><%= notice %></p>

<p>
  <b>Name:</b>
  <%= @log_book.name %>
</p>

<%= render \'log_entries/form\', :log_entry => @log_book.LogEntries.new %>



<%= link_to \'Edit\', edit_log_book_path(@log_book) %> |
<%= link_to \'Back\', log_books_path %>
    
已邀请:
        您可以渲染任何想要的部分,只要您从view文件夹中给出它的路径即可:
 <%= render :partial => \'/log_entries/form\', :log_entry => @log_book.log_entries.build %>
您的路径必须以/开头,以使Rails 知道您是相对于视图文件夹的。 否则,它被认为是相对于您当前的文件夹。 附带说明一下,避免局部使用实例变量是很不错的选择,然后您就正确地做到了。 刚刚看到您的部分表格有误:
 :Text
不应为模型的有效列名。尝试:text     
        尝试按以下方式切换render方法:
<%= render :partial => \'log_entries/form\', :log_entry => @log_book.LogEntries.new %>
传递对象的实例变量时,仅使用渲染即可。但是,由于您正在指定文件,因此最好使用该选项。     

要回复问题请先登录注册