У меня есть запись студента и субаренды в моей базе данных. Таким образом, субаренду принадлежит Студент.
Модель студента
class Student < ApplicationRecord
has_many :sublet_posts, :dependent => :destroy
end
Модель субаренды
class SubletPost < ApplicationRecord
belongs_to :student
end
Маршрут
Rails.application.routes.draw do
resources :sublet_posts
resources :students
end
Контроллер студента
class StudentsController < ApplicationController
before_action :set_student, only: [:show, :edit, :update, :destroy]
# GET /students
# GET /students.json
def index
@students = Student.all
end
# GET /students/1
# GET /students/1.json
def show
# student_id should be the current user id
@sublet_posts = SubletPost.where(student_id:1)
end
# GET /students/new
def new
@student = Student.new
end
# GET /students/1/edit
def edit
end
# POST /students
# POST /students.json
def create
@student = Student.new(student_params)
respond_to do |format|
if @student.save
format.html { redirect_to @student, notice: 'Student was successfully created.' }
format.json { render :show, status: :created, location: @student }
else
format.html { render :new }
format.json { render json: @student.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /students/1
# PATCH/PUT /students/1.json
def update
respond_to do |format|
if @student.update(student_params)
format.html { redirect_to @student, notice: 'Student was successfully updated.' }
format.json { render :show, status: :ok, location: @student }
else
format.html { render :edit }
format.json { render json: @student.errors, status: :unprocessable_entity }
end
end
end
# DELETE /students/1
# DELETE /students/1.json
def destroy
@student.destroy
respond_to do |format|
format.html { redirect_to students_url, notice: 'Student was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_student
@student = Student.find(params[:id])
end
# Only allow a list of trusted parameters through.
def student_params
params.require(:student).permit(:fname, :lname, :email, :password, :phone, :dob)
end
end
Представление студенческого шоу
<p id="notice"><%= notice %></p>
<div>
<h3>Sublet Post</h3>
<%= link_to "New Sublet Post", new_sublet_post_path %>
<% @sublet_posts.each do |sublet_post| %>
<%= sublet_post.created_at %>
<%= link_to "Edit", edit_sublet_post_path(sublet_post.id) %>
<% end %>
</div>
В контроллере студента у меня есть @sublet_posts = SubletPost.where (student_id: 1), но я жестко запрограммировал student_id: 1, поэтому каждый пост создан находится в идентификаторе студента: 1. Есть ли способ отобразить субаренду поста для студента, которому он принадлежит?
Кроме того, в _form в субаренду пост
<%= form_with(model: sublet_post, local: true) do |form| %>
<% 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="field">
<%= form.hidden_field :student_id, :value => '1' %>
</div>
<div class="actions">
<%= form.submit %>
</div>
<% end %>
I присвоил скрытое значение 1, но есть ли способ присвоить его для student.id, который принадлежит?
Спасибо за любую помощь.