gpt4 book ai didi

ruby-on-rails - 在不同的 Controller 中渲染表单部分(非嵌套)

转载 作者:行者123 更新时间:2023-12-03 15:12:46 25 4
gpt4 key购买 nike

我有两个使用 generate scaffolding 生成的模型,一个是 LogBook,另一个是 LogEntry。我想在 LogBook 显示页面上为 LogEntry 呈现部分表单。当我在部分上调用 render 时,我收到此错误:

undefined method `model_name' for NilClass:Class

我认为这是因为默认的 _form 使用了一个实例变量,当从单独的 Controller 调用时该变量不存在。所以我尝试将 LogEntry _form.html.erb 转换为使用局部变量并通过渲染调用将它们传入。在此之后,这里是错误:
Model LogEntry does not respond to Text

如何将这个部分包含在不同 Controller 的显示页面中?

楷模:
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 %>

日志 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
知道你是相对于 View 文件夹的。

否则,它被假定为相对于您的当前文件夹。

作为旁注,避免在部分中使用实例变量是一种很好的做法,您当时就这样做了。

刚刚看到您的部分表单有错误:
 :Text

不应是模型的有效列名。尝试:文本

关于ruby-on-rails - 在不同的 Controller 中渲染表单部分(非嵌套),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6189728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com