【问题标题】:Partial View Ruby on Rails部分视图 Ruby on Rails
【发布时间】:2012-07-31 14:40:13
【问题描述】:

我有 3 个模型:

  • 客户
  • book_manager

customer 可以编辑自己的设置,例如个人资料帐户。但是,它会渲染不同的模型,例如 book。为此,我决定渲染文件 book/form 已跟随 <% render book/form %>

当个人资料页面加载时,如果之前没有写过任何内容,客户可以在书籍部分中查看任何内容,或者如果他之前已经写过一些内容,则可以查看内容。在客户控制器页面中,我有以下代码来获取信息:

def edit
  @book = current_customer.books.order("created_at DESC").limit(1)
end

books/_form.html.erb 中我有以下内容:

<%= form_for(@book) do |f| %>
  <% if @book.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@book.errors.count, "error") %> prohibited this book from being saved:</h2>

      <ul>
      <% @book.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>
  <div class="field">
    <%= f.label :description %><br />
    <%= f.text_field :description %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

book 控制器edit 中,我什么都没有,或者我应该在哪里放置我的命令@book 以便他们可以说话?

我有以下错误:

NoMethodError in Customers#edit

Showing /home/jean/rail/map/app/views/books/_form.html.erb where line #1 raised:

undefined method `model_name' for ActiveRecord::Relation:Class
Extracted source (around line #1):

1: <%= form_for(@book) do |f| %>
2:   <% if @book.errors.any? %>
3:     <div id="error_explanation">
4:       <h2><%= pluralize(@book.errors.count, "error") %> prohibited this book from being saved:</h2>

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3


    【解决方案1】:
    <% render book/form.html.erb %>
    

    应该是

    <%= render '/books/form' %>
    

    【讨论】:

    • 哎呀,谢谢,我把它写在论坛上,我的编辑不好
    【解决方案2】:

    您的代码中至少有一个简单的错误

    @book = current_user.books.order("created_at DESC").limit(1)
    

    这确实会返回最近的书,但它会以数组的形式返回。

    您应该使用方法first,而不是调用limit(1)

    @book = current_user.books.order("created_at DESC").first
    

    【讨论】:

    • 谢谢,我有一个问题,如果它是空的最好?导致我的新错误是 NilClass:Class 的未定义方法 `model_name'
    • 正常的做法是在new 动作中做@book = current_user.books.buildedit 动作中做@book = current_user.books.find(params[:id])。在这两种情况下,form_for @book 都可以正常工作。也许你应该尝试类似的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 2016-02-26
    • 2012-04-16
    • 2014-08-17
    • 1970-01-01
    • 2013-06-24
    • 2023-04-02
    相关资源
    最近更新 更多