簡體   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