繁体   English   中英

Ruby on Rails:如何提取 URL 参数并将值插入变量中

[英]Ruby on Rails: How to extract URL parameter and insert the value inside a variable

我需要从我的 url 中提取一个参数并将其插入到我的数据库中以供推荐系统使用。

假设这个id = 1用户与另一个用户分享了他的链接,网址将是:

https://www.example.com/signup?referredBy=1

当新用户创建他的帐户时,我希望为字段referredBy分配来自referredBy参数的值,该值应该是一个整数。

我试过做

@user.referredBy = [:referredBy]

但它没有成功。

任何帮助表示赞赏。

太感谢了。

编辑

我的index.html.erb是:

<% if current_user %>
  Logged in as <%= current_user.nomeUsuario %>
  <%= link_to "Log out", logout_path %>
<% end %>

<p id=”notice”><%= notice %></p>

<% else %>
  <%= link_to "Sign up", signup_path %>
  <%= link_to "Log in", login_path %> 
<% end %>

我的new.html.erb是:

<h1>New User</h1>

<% if current_user %>
  <% controller.redirect_to root_url %>
<% else %>
  
  <%= render 'form', user: @user %>
  <%= link_to 'Back', login_url %>
<% end %>

我的_form.html.erb是:

<%= form_with(model: user) do |form| %>
  <% if user.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(user.errors.count, "error") %> prohibited this user from being saved:</h2>

      <ul>
        <% user.errors.each do |error| %>
          <li><%= error.full_message %></li>
        <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= form.label :name, "Full Name" %>
    <%= form.text_field :nomeUsuario %>
  </div>

  <div class="field">
    <%= form.label :name, "E-mail" %>
    <%= form.text_field :email %>
  </div>

  <div class="field">
    <%= form.label :name, "Password" %>
    <%= form.password_field :password %>
  </div>

  <div class="field">
    <%= form.label :name, "Password Confirmation" %>
    <%= form.password_field :password_confirmation %>
  </div>

  <div class="field">
    <%= form.label :name, "Tipo do Plano" %>
    <%= form.select :tipoPlano, ["Gratuito", "Mensal", "Anual"], selected: "Gratuito" %>
  </div>

  <%= form.hidden_field :indicadoPor, params[:indicadoPor] %>

  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>

我的user_controller.rb是:

class UsersController < ApplicationController
  before_action :set_user, only: %i[ show edit update destroy ]

  # GET /users/new
  def new
    @user = User.new
  end

  # GET /users/1/edit
  def edit
  end

  # POST /users or /users.json
  def create
    @user = User.new(user_params)
    set_tipoPlano
    @user.indicadoPor = params[:indicadoPor]
    respond_to do |format|
      if @user.save
        format.html { redirect_to root_url, notice: "User was successfully created." }
        format.json { render root_url, status: :created, location: @user }
      else
        format.html { render :new, status: :unprocessable_entity }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /users/1 or /users/1.json
  def update
    respond_to do |format|
      if @user.update(user_params)
        set_tipoPlano
        format.html { redirect_to root_url, notice: "User was successfully updated." }
        format.json { render :show, status: :ok, location: @user }
      else
        format.html { render :edit, status: :unprocessable_entity }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_user
      @user = User.find(params[:id])
    end

    # Only allow a list of trusted parameters through.
    def user_params
      params.require(:user).permit(:email, :password, :password_confirmation, :nomeUsuario, :tipoPlano, :valorPlano, :indicadoPor, :comissaoAcumuladaAtual, :comissaoASerRetirada)
    end

    def set_tipoPlano
      if(@user.tipoPlano == "Gratuito")
        @user.valorPlano = 0.0
      
      elsif(@user.tipoPlano == "Mensal")
        @user.valorPlano = 49.90
      
      elsif(@user.tipoPlano == "Anual")
        @user.valorPlano = 39.90
      end
    end
end

如果您需要其他东西,请告诉我! 非常感谢你的帮助。

回答如下

我已经修好了。

我只需要将表单更改为:

<%= form.hidden_field :indicadoPor, value: params[:indicadoPor] %>

我忘记了= ,所以没有呈现表单。 另外,我已经从控制器中删除了@user.referredBy = params[:referredBy] 现在一切都很好。

谢谢你们,女孩和非二进制文件到目前为止的帮助!

[:referral]

这是一个具有单个值的数组。 该值是一个符号:referral 我不确定您的referredBy 列是什么类型,但几乎可以肯定它会抱怨给定了一组符号。

你要

params[:referral]

params 是一个类似哈希的对象,包含 url/(有时是正文)中的参数。 因此params[:referral]在 params 散列中查找:referral符号并返回用户提供的任何内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM