首页 > 解决方案 > 用于 nil:NilClass 的未定义方法

问题描述

我正在尝试从另一个控制器的页面显示新的表单页面,我使用的是嵌套资源。

我收到此错误

undefined method `sublet_posts' for nil:NilClass

学生模型

class Student < ApplicationRecord
  has_many :sublet_posts, :dependent => :destroy
end

Sublet_post 模型

class SubletPost < ApplicationRecord
    belongs_to :student
end

路由.rb

  resources :students do
    resources :sublet_posts
  end

学生展示视图

<p id="notice"><%= notice %></p>

...
...
...

<h3>Sublet Post</h3>
<% @student.sublet_posts.each do |sublet_post| %>
  <%= sublet_post.description %>
  <%= link_to "Edit", edit_student_sublet_post_path(@student, sublet_post) %>
<% end %>
<h3>Add Sublet Post</h3>
<%= link_to "Add", new_student_sublet_post_path(@student)%>

Sublet_Post 控制器

class SubletPostsController < ApplicationController
  before_action :set_sublet_post, only: [:edit, :update, :destroy]

  # POST /sublet_posts
  # POST /sublet_posts.json
  def create
    @student = Student.find(params[:student_id])
    @sublet_post = @student.create(sublet_post_params)
    @sublet_post.student_id = current_member_id 
    redirect_to student_path(@student)
  end

  # PATCH/PUT /sublet_posts/1
  # PATCH/PUT /sublet_posts/1.json
  def update
    @student = Student.find(params[:student_id])
    @sublet_post = @student.sublet_posts.update(sublet_post_params)
    redirect_to student_path(@student)
  end
  private
    # Use callbacks to share common setup or constraints between actions.
    def set_sublet_post
      @sublet_post = SubletPost.find(params[:id])
    end

    # Only allow a list of trusted parameters through.
    def sublet_post_params
      params.require(:sublet_post).permit(......)
    end
end

转租帖子表单视图

<%= form_for [@student, @student.sublet_posts.build] do |form| %>. <----------------- Error
  <% if sublet_post.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(sublet_post.errors.count, "error") %> prohibited this sublet_post from being saved:</h2>

      <ul>
      <% sublet_post.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>

任何帮助将不胜感激。我认为不需要学生控制器,因此我将其省略了。

标签: htmlruby-on-railsroutes

解决方案


推荐阅读