Rails为未注册用户或软用户设计访问联系表单

时间:2017-01-18 06:06:56

标签: ruby-on-rails devise ruby-on-rails-5

我有一个联系表格,即使是未注册的用户(访客)也可以访问,并且会在联系表格提交时发送邮件。

关注https://codediode.io/lessons/364-gradual-engagement-with-Now脆弱和设计,我已经覆盖了current_user和authenticate_user!在注册控制器,谢天谢地它重定向到localhost:3000 /访客但索引页面没有加载和设计是一个错误:"完成401未授权"。如果我在应用程序控制器中粘贴相同的方法因为它取代了注册控制器,它甚至不会加载localhost:3000,因为soft_token不是用户的列。但我不想将软用户转换为注册用户,因此不需要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

1 个答案:

答案 0 :(得分:0)

好的,我自己解决了,因为在应用程序控制器中有before_action:authenticate_user,因此它应用于所有控制器。但是,使用此SO链接,我解决了它:How do I make a before_action to run on all controllers and actions except one?