如何制作重定向和提交表单的 link_to

How to make a link_to that redirects and submits a form

我有一个模态将在我的应用程序中用作免责声明,我需要模态底部的 link 表示 "agree & continue" 来切换布尔值并输入时间布尔值被切换。我已将按钮创建为带有隐藏 links 的表单,但我似乎看不到如何使其提交表单并重定向到我指定的路径。这是我的 link_to 代码。

<% if current_user.user_record.blank? %>
            <%= form_for :user do |f| %>
            <% f.hidden_field :disclosure_acceptance, :value => true %>
            <% f.hidden_field :disclosure_date, :value => Time.now %>
            <%= link_to("Agree & Continue", user_steps_path(current_user), class: "btn btn-primary") %>
            <% end %>
<% end %>

首先,在您的 user_records_controller 或表单显示的任何控制器操作中创建一个 new 方法:

 def new
   @user_record = current_user.build_user_record
 end

把这个放在你的视图中:

  <% if current_user.user_record.blank? %>
                <%= form_for @user_record do |f| %>
                <%= f.hidden_field :disclosure_acceptance, :value => true %>
                <%= f.hidden_field :disclosure_date, :value => Time.now %>
                <%=f.submit "Agree & Continue",  class: "btn btn-primary") %>
                <% end %>
    <% end %>

user_record 创建一个如下所示的操作:

  def create
    @user_record = current_user.build_user_record(permitted_params) 
     if @user_record.save
      redirect_to user_steps_path(current_user) 
    else
      render :new
  end
 end



 private
   def permitted_params
      params.require(:user_record).permit(:disclosure_acceptance , :disclosure_date) #etc
   end

更新

如果你想直接跳转到'create'动作,你可以这样配置: 向您的路线添加自定义操作:

  post 'rate/:article_id' => 'user_records#create' :as => :create_user_record
                            #or whichever controller/action you wish

您应该更新表单上的路线:

= form_tag create_user_record_path, :method=>'post'  do
  #etc

为了从控制器创建一个 user_record,您需要稍微改变一下:

  def create
       current_user.user_record.create(:user_id => current_user.id, :disclosure_acceptance => params[:disclosure_acceptance] , :disclosure_date => params[:disclosure_date])
    if current_user.user_record.save 
      #etc

 end