rails初心者です。
作りたい機能をネットで調べているものの、カスタマイズの仕方がわからず途方に暮れております。
お力貸していただけると嬉しいです。
情報不足の場合は、遠慮なくコメントください!
現在、生徒と先生をマッチングさせるサービスを作っております。
生徒がこの先生に連絡したいと思った時のために、問い合わせフォームを作ろうとしています。
とりあえず、問い合わせ機能は実装したのですが
現在ログイン中の生徒が、ログインしていない先生にお問い合わせができるように、
どこをどうカスタマイズすれば良いのかわからない状態です。
ちなみに、現在の状況は以下の通りです。
teacher, user, inquiry, inquiry_mailerモデル、コントローラー、ビュー
生徒がログインして、ここから先生にコンタクトを取ります
teachers/show.html.erb
<div class="main teacher-show"> <div class="container"> <div class="teacher"> <% if @current_user %> <%= link_to "この先生に相談する", inquiry_path %> <% end %> </div> </div> </div>
次に、相談内容を入力します
inquiry/index.html.erb
<%= form_for @inquiry, :url => inquiry_confirm_path do |f| %> <div class="page-header"> <h1>お問い合わせ</h1> </div> <% if @inquiry.errors.any? %> <div class="alert alert-danger" role="alert"> <strong>入力内容にエラーがあります</strong> <ul> <% @inquiry.errors.each do |attr, msg| %> <li><%= msg %></li> <% end %> </ul> </div> <% end %> <table class="table"> <tr> #本来ならここにログイン中の生徒の名前を表示させたい <th>名前<span class="text-danger">(必須)</span></th> <td><%= f.text_field :name %></td> </tr> <tr> #本来ならここにログイン中の生徒のメアドを表示させたい <th>メールアドレス<span class="text-danger">(必須)</span></th> <td><%= f.text_field :email %></td> </tr> <tr> <th>お問い合わせ内容</th> <td><%= f.text_area :message %></td> </tr> </table> <%= f.submit '確認', class: 'btn btn-primary' %> <% end %>
入力内容の確認をします
inquiry/confirm.html.erb
<div class="page-header"> <h1>お問い合わせ</h1> </div> <%= form_for @inquiry, :url => inquiry_thanks_path do |f| %> <table class="table"> <tr> <th>名前</th> <td> <%= f.hidden_field :name %> <%= @inquiry.name %> </td> </tr> <tr> <th>メールアドレス</th> <td> <%= f.hidden_field :email %> <%= @inquiry.email %> </td> </tr> <tr> <th>お問い合わせ内容</th> <td> <%= f.hidden_field :message %> <%= simple_format(@inquiry.message) %> </td> </tr> </table> <%= f.submit '送信', :class => 'btn btn-primary' %> <% end %>
送信後、先生のメールボックスにメッセージが届きます
Webサイトからお問い合わせがありました。 -------------------------- Name: <%= @inquiry.name %> Email: <%= @inquiry.email %> Message: <%= @inquiry.message %> --------------------------
inquiry.rb
class Inquiry < ApplicationRecord #データベースを使わないモデルはアクティブレコードを使うらしいが、本来なら生徒と先生のデータをそのまま使いたい include ActiveModel::Model attr_accessor :name, :email, :message validates :name, :presence => {:message => '名前を入力してください'} validates :email, :presence => {:message => 'メールアドレスを入力してください'} end
inquiry_mailer.rb
class InquiryMailer < ApplicationRecord default from: "example@example.com" # 送信元アドレス default to: "example@example.com" # 送信先アドレス def received_email(inquiry) @inquiry = inquiry mail(:subject => 'お問い合わせを承りました') end end
コントローラーの中身は以下の通りです
class InquiryController < ApplicationController def index # 入力画面を表示 @inquiry = Inquiry.new render :action => 'index' end def confirm # 入力値のチェック @inquiry = Inquiry.new(inquiry_params) if @inquiry.valid? # OK。確認画面を表示 render :action => 'confirm' else # NG。入力画面を再表示 render :action => 'index' end end def thanks # メール送信 @inquiry = Inquiry.new(inquiry_params) InquiryMailer.received_email(@inquiry).deliver # 完了画面を表示 render :action => 'thanks' end private def inquiry_params params.require(:inquiry).permit(:name, :email, :message) end end
最後まで読んでいただきありがとうございます。
どなたかご教授いただけると光栄です^^