RubyonRails:如何提取url参数并在变量中插入值

kadbb459  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(414)

我需要从我的url中提取一个参数,并将其插入到我的数据库中,以供参考系统使用。
假设这个用户 id = 1 已与其他用户共享其链接,url将为: 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] 从我的控制器。现在一切都好了。
谢谢你们,姑娘们和非二进制文件到目前为止的帮助!

4jb9z9bj

4jb9z9bj1#

[:referral]

这是一个具有单个值的数组。该值是一个符号 :referral . 我不确定你的referredby列是什么类型的,但它几乎肯定会抱怨被赋予了一系列符号。
你想要

params[:referral]

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

相关问题