неопределенный метод `для nil: NilClass - PullRequest
1 голос
/ 16 апреля 2020

Я пытаюсь отобразить новую страницу формы со страницы другого контроллера, я использую вложенные ресурсы.

Я получаю эту ошибку

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

route.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

Sublet Post формы просмотра

<%= 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 %>

Любая помощь будет принята с благодарностью. Я не думал, что нужен студенческий контроллер, поэтому я пропустил это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...