Я пытаюсь отобразить новую страницу формы со страницы другого контроллера, я использую вложенные ресурсы.
Я получаю эту ошибку
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 %>
Любая помощь будет принята с благодарностью. Я не думал, что нужен студенческий контроллер, поэтому я пропустил это.