私はコンタクトフォームを持っていますが、これは未登録のユーザー(訪問者)でもアクセスでき、コンタクトフォームの送信時にメールが送信されます。登録されていないユーザーまたはソフトユーザーがコンタクトフォームにアクセスするようにレールが設定されています
https://codediode.io/lessons/364-gradual-engagement-with-Now frails-and-deviseに続いて、私はcurrent_userとauthenticate_userを上書きしました!そして、感謝して、それはlocalhost:3000/visitorsにリダイレクトされますが、インデックスページは読み込まれず、 "401 Unauthorized"というエラーをスローしています。登録コントローラに代わるものと同じ方法をアプリケーションコントローラに貼り付けると、 softhostがユーザーの列ではないため、localhost:3000もロードされません。しかし、私はソフトユーザーを登録ユーザーに変換したくないので、soft_tokenは必要ありません。
はどのようにお問い合わせフォームをロードする必要がありますか?
ここに私のコードです。 TIA。 訪問者/#インデックス
<%= bootstrap_form_for @contact do |f| %>
<div class="row">
<div class="col-sm-3">
<%= f.hidden_field :soft_token, value: current_user.soft_token %>
<%= f.text_field :name, placeholder: "Enter your name", label: "Your Name" %>
<%= f.email_field :email, prompt_text: "Mention email for contacting you back." %>
<%= f.select(:subject, :subject_id, options_for_select([['Site Feedback', 1], ['Ask a Question', 2], ['Report a problem', 3]])) %>
<%= f.text_area :message, placeholder: "Enter your question.", label: "Message" %>
</div>
</div>
<div class="row">
<%= f.submit "Submit", class: "btn btn-primary btn-outline btn-sm pull-right" %>
</div>
routes.rbを:
post 'visitors/contact', to: 'visitors#contact'
match 'visitors' => 'visitors#index', :as => :visitors, :via => :get
devise_for :users, :controllers => {registrations: "devise_override/registrations"}
visitors_controller
class VisitorsController < ApplicationController
def index
end
def contact
h = JSON.generate({ 'name' => params[:name],
'email' => params[:email],
'subject' => params[:subject],
'message' => params[:message] })
VisitorMailer.contact_email(@name, @email, @subject, @message).deliver_later(wait_until: 10.hours.from_now)
redirect_to :root_url, notice: "Message sent"
end