vfi*_*lby 15 ruby-on-rails partials ruby-on-rails-3
我有两个生成脚手架的模型,一个是LogBook,另一个是LogEntry.我想在LogBook显示页面上为LogEntry渲染部分表单.当我在局部调用渲染时,我收到此错误:
undefined method `model_name' for NilClass:Class
Run Code Online (Sandbox Code Playgroud)
我假设这是因为默认_form使用的实例变量在从单独的控制器调用时不存在.所以我尝试将LogEntry _form.html.erb转换为使用局部变量并通过render调用传递它们.在此之后是错误:
Model LogEntry does not respond to Text
Run Code Online (Sandbox Code Playgroud)
如何将此部分包含在显示页面中,形成不同的控制器?
楷模:
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
Run Code Online (Sandbox Code Playgroud)
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 %>
Run Code Online (Sandbox Code Playgroud)
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 %>
Run Code Online (Sandbox Code Playgroud)
apn*_*ing 38
只要从视图文件夹中提供路径,就可以渲染所需的任何部分:
<%= render :partial => '/log_entries/form', :log_entry => @log_book.log_entries.build %>
Run Code Online (Sandbox Code Playgroud)
您的路径必须以/开头,让Rails知道您相对于视图文件夹.
否则,它被假定为相对于您当前的文件夹.
作为旁注,避免在部分中使用实例变量是很好的,当时就做到了.
刚刚看到你的部分形式有错误:
:Text
Run Code Online (Sandbox Code Playgroud)
不应该是模型的有效列名.试试:文字
| 归档时间: |
|
| 查看次数: |
25079 次 |
| 最近记录: |