In the parent-child relationship model, specify foreign_key in the migration file of the child model.
question.rb
#Parent model
class Question < ApplicationRecord
has_many :question_similars, dependent: :destroy
accepts_nested_attributes_for :question_similars
validates :question, presence: true
validates :description, presence: true
end
question_similar.rb
class QuestionSimilar < ApplicationRecord
belongs_to :question
validates :similar_word, presence: true
end
questions_controller.rb
class QuestionsController < ApplicationController
before_action :require_login
before_action :session_number_to_zero
def search
@questions = Question.where('question ilike ?', "%#{params[:search]}%")
end
def index
@questions = Question.all
end
def new
@question = Question.new
@question.question_similars.build
end
def create
@question = Question.new(question_params)
if @question.save
redirect_to questions_path, notice: 'Created a word'
else
render 'new'
end
end
def show
@question = Question.find(params[:id])
end
def edit
@question = Question.find(params[:id])
end
def update
@question = Question.find(params[:id])
if @question.update(question_update_params)
redirect_to questions_path, notice: 'Edited the word'
else
render 'edit'
end
end
def destroy
@question = Question.find(params[:id])
if @question.destroy
redirect_to questions_path, notice: 'Deleted the word'
else
redirect_to root_url
end
end
private
def question_params
params.require(:question).permit(:question, :description, question_similars_attributes:
[:similar_word, :question_id])
end
def question_update_params
params.require(:question).permit(:question, :description, question_similars_attributes:
[:similar_word, :question_id, :_delete, :id])
end
end
questions/new.html.erb
<h1>Word creation</h1>
<%= form_for @question do |f| %>
<%= render 'layouts/error_messages', model: f.object %>
<div class="form-group">
<%= f.label :question, 'word' %>
<%= f.text_field :question, class: 'form-control' %>
</div>
<div class="form-group">
<%= f.label :description, 'Explanation' %>
<%= f.text_area :description, class: "form-control" %>
</div>
<%= f.fields_for :question_similars do |q| %>
<div class="form-group">
<%= q.label :similar_word, 'Synonyms' %>
<%= q.text_field :similar_word, class: "form-control" %>
</div>
<% end %>
<%= f.submit 'Create', class: 'btn btn-primary form-control' %>
<% end %>
questions/edit.html.erb
<%= form_for(@question, url: { controller: 'questions', action: 'update' }) do |f| %>
<%= render 'layouts/error_messages', model: f.object %>
<div class="form-group">
<%= f.label :question, 'word' %>
<%= f.text_field :question, class: 'form-control' %>
</div>
<div class="form-group">
<%= f.label :description, 'Explanation' %>
<%= f.text_area :description, class: "form-control" %>
</div>
<%= f.fields_for :question_similars do |q| %>
<div class="form-group">
<%= q.label :similar_word, 'Synonyms' %>
<%= q.text_field :similar_word, class: "form-control" %>
<%= q.hidden_field :id, value: q.object.id %>
</div>
<% end %>
<%= f.submit 'Update', class: 'btn btn-primary form-control' %>
<% end %>
Recommended Posts