ruby-on-rails – 在不同的控制器中渲染部分(不嵌套)
发布时间:2020-12-16 20:35:59 所属栏目:百科 来源:网络整理
导读:我有两个生成脚本的模型,一个是LogBook,另一个是LogEntry.我想在LogBook展示页面上呈现LogEntry的部分格式.当我调用render部分我得到这个错误: undefined method `model_name' for NilClass:Class 我认为这是因为默认_form使用一个实例变量,当从单独的控制
我有两个生成脚本的模型,一个是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 %> 解决方法
只要您从视图文件夹中指定路径,您可以渲染任何您想要的部分:
<%= render :partial => '/log_entries/form',:log_entry => @log_book.log_entries.build %> 你的路径必须以/来开始,让Rails 否则它被认为是相对于你当前的文件夹. 作为旁注,避免在局部变量中使用实例变量是很好的做法,那么你就这样做了. 刚刚看到你的部分形式出现错误: :Text 不应该是模型的有效列名.尝试:文字 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |