[英]Ruby on Rails: How to send a specific/chosen record from one table (User) to another with a button from user interface
I started off with Ruby one week ago. 我一周前开始使用Ruby。 My project is to make a Restaurant reservation webpage.
我的项目是制作一个餐厅预订网页。 I made the User table that contains Users name/last name/address/email/password/password confirmation info, I also made another table called Friends that contains name/last name/address/email.
我创建了包含用户名/姓氏/地址/电子邮件/密码/密码确认信息的用户表,还创建了另一个名为“朋友”的表,其中包含姓名/姓氏/地址/电子邮件。
The current user is able to add a friend to the Friend table when pressing a Button (Add) by the users row in the table of all existing Users. 通过按所有现有“用户”表中的“用户”行中的按钮(添加),当前用户可以将朋友添加到“朋友”表中。 So, by clicking the button by the specific user info that the current user selected, the specific user info (name/last name/address/email) will be copied to the current user friend table.
因此,通过单击当前用户选择的特定用户信息的按钮,特定用户信息(名称/姓氏/地址/电子邮件)将被复制到当前用户好友表中。
The database I am using is Sqlite. 我正在使用的数据库是Sqlite。
Here is the users_controller: 这是users_controller:
class UsersController < ApplicationController
before_filter :save_login_state, :only => [:new, :create]
def index
@user = User.all
end
def new
#Signup Form
@user = User.new
end
def show
redirect_to(:controller => 'sessions', :action => 'login')
flash[:notice] = "Successful!"
flash[:color]= "valid"
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update(user_params)
redirect_to @user
else
render 'edit'
end
end
def create
@user = User.new(user_params)
if @user.save
redirect_to(:action => 'login')
else
flash[:notice] = "Form is invalid"
flash[:color]= "invalid"
render "new"
end
end
private
def user_params
params.require(:user).permit(:email, :password, :password_confirmation, :ime, :prezime, :adresa)
end
end
User index.html.erb: 用户index.html.erb:
<table class="table table-striped sortable">
<thead>
<tr class="tr1">
<th class="th2">E-mail</th>
<th class="th2">Ime</th>
<th class="th2">Prezime</th>
<th class="th2">Adresa</th>
</tr>
</thead>
<tbody>
<% @user.each do |users| %>
<tr class="tr1">
<td><%= users.email %></td>
<td><%= users.ime %></td>
<td><%= users.prezime %></td>
<td><%= users.adresa %></td>
<td><%= link_to 'Edit', edit_user_path(users)%></td>
</tr>
<% end %>
</tbody>
</table>
User new.html.erb: 用户new.html.erb:
<% @page_title = "UserAuth | Signup" %>
<div class="Sign_Form">
<h1>Registracija</h1>
<%= form_for(@user) do |f| %>
<table class="table4">
<tr><th class="th1"> Email: </th><th><%= f.text_field :email%></th></tr>
<tr><th class="th1"> Password: </th><th><%= f.password_field :password%></th></tr>
<tr><th class="th1"> Repeat password: </th><th><%= f.password_field :password_confirmation%></th></tr>
<tr><th class="th1"> Ime: </th><th><%= f.text_field :ime%></th></tr>
<tr><th class="th1"> Prezime: </th><th><%= f.text_field :prezime%></th></tr>
<tr><th class="th1"> Adresa: </th><th><%= f.text_field :adresa%></th></tr>
</table>
<div align="left"><%= f.submit :"Sign Up" %></div>
<% end %>
<% if @user.errors.any? %>
<ul class="Signup_Errors">
<% for message_error in @user.errors.full_messages %>
<li>* <%= message_error %></li>
<% end %>
</ul>
<% end %>
</div>
user.rb: user.rb:
class User < ActiveRecord::Base
attr_accessor :password
before_save :encrypt_password
after_save :clear_password
EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/
validates :ime, :presence => true
validates :prezime, :presence => true
validates :adresa, :presence => true
validates :email, :presence => true, :uniqueness => true, :format => EMAIL_REGEX
validates :password, :presence => true, length: { minimum: 6 }, :confirmation => true
#Only on Create so other actions like update password attribute can be nil
#attr_accessible :username, :email, :password, :password_confirmation
def self.authenticate(email="", login_password="")
if EMAIL_REGEX.match(email)
user = User.find_by_email(email)
end
if user && user.match_password(login_password)
return user
else
return false
end
end
def match_password(login_password="")
encrypted_password == BCrypt::Engine.hash_secret(login_password, salt)
end
def encrypt_password
unless password.blank?
self.salt = BCrypt::Engine.generate_salt
self.encrypted_password = BCrypt::Engine.hash_secret(password, salt)
end
end
def clear_password
self.password = nil
end
end
create_users: create_users:
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :email
t.string :encrypted_password
t.string :salt
t.string :ime
t.string :prezime
t.string :adresa
t.timestamps
t.timestamps null: false
end
end
end
You will need a controller for Friendships
eg FriendshipsController
. 您将需要一个用于
Friendships
的控制器,例如FriendshipsController
。 Your Add
button should point to an action in FriendshipsController
which will copy the parameters you provide. 您的“
Add
按钮应指向FriendshipsController
中的一个动作,该动作将复制您提供的参数。
In your view you should have something like this: 在您看来,您应该具有以下内容:
<%= button_to "Add friend", friendships_path(:name => user.name, :email => user.email ...) %>
FriendshipsController: FriendshipsController:
def create # handle params here (you can get user's data from params[:name], params[:email] and such # eg @friendship = Friendship.create(:name => params[:name], ...) end
Also consider this article http://railscasts.com/episodes/163-self-referential-association explaining self referential association in Rails. 还可以考虑使用本文http://railscasts.com/episodes/163-self-referential-association解释Rails中的自引用关联。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.