怎么从轨道上链接红宝石获得参数?

时间:2017-10-22 09:35:42

标签: ruby-on-rails ruby cookies parameters getparameter

我的用户模型中有inviter列。我想从链接中获取params并将其保存在cookie中。例如,从以下链接:

domain.com/?ref=5

我希望保存到Cookie编号?ref=**5**

当用户进行注册时,用户无需在表单中写入推荐号码,因为它已经在cookie中。

<%= form_for(@user) do |f| %>
<%= render 'shared/error_messages', object: f.object %>

<%= f.label :name,'Your name'%>
<%= f.text_field :name, class: 'form-control' %>

<%= f.label :email,'Email' %>
<%= f.email_field :email, class: 'form-control' %>

<%= f.label :invite, 'Number who invited you' %>
<%= f.text_field :invite, class: 'form-control' %>

<%= f.label :password, 'password' %>
<%= f.password_field :password, class: 'form-control' %>

<%= f.label :password_confirmation ,'password confirmation' %>
    <%= f.password_field :password_confirmation, class: 'form-control' %>
<br>
    <br>
    <div class="textc">
    <%= f.submit yield(:button_text), class: "formbut" %>
    </div>
<% end %>

邀请号码将使用?ref=**5**并注册新用户。

2 个答案:

答案 0 :(得分:1)

将这样的内容添加到application_controller.rb

before_action :store_ref

private

def store_ref
  cookies[:ref] = params[:ref] if params[:ref].present?
end

这样的事情给你的用户创造了行动:

def create
  @user = User.new(user_params)
  @user.ref = cookies[:ref]

  if @user.save
  # ...

答案 1 :(得分:0)

更好的方法是使用隐藏的输入并使用params[:ref]中的值填充它。

class UsersController < ApplicationController
  def new
    @user = User.new do |u|
      if params[:ref].present? 
        u.inviter = params[:ref]
      end
    end
  end

  # ...
end
<%= form_for(@user) do |f| %>
  # ...
  <% if f.object.inviter.present? %>
    <%= f.hidden_field :inviter %>
  <% end %>
<% end %>

它需要更少的解决方法。