[英]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.