Ruby on rails登录表单不保存属性和登录工作流程

时间:2016-03-29 03:48:54

标签: ruby-on-rails ruby jruby jrubyonrails

我是 jRuby / Ruby on Rails 的新手,并尝试创建一个网站(学习目的)。

在此Web应用程序中,用户需要注册到系统。成功登录尝试后,他们可以维护自己的仪表板,这是一个简单的电话联系详细信息管理。

我正在使用

  1. jruby 9.0.5.0 (2.2.3)
  2. Rails 4.2.6
  3. Windows 10
  4. MySQL安装中
  5. XAMPP

    问题1

    在我的注册中,当我尝试插入新用户时,功能但我没有在我的文本字段中获取值。相反,我在我的表中得到空值。我做错了什么?

    这是我的创建User

       class CreateUsers < ActiveRecord::Migration
           def change
              create_table :users do |t|
                 t.string :name
                 t.string :email
                 t.string :password
    
                 t.timestamps null: false
              end
           end
        end
    

    这是我的user.rb型号

       class User < ActiveRecord::Base
           begin
               attr_accessor :name, :email, :password, :password_confirmation
           end
           validates :name, :presence => true, :uniqueness => true, :length => { :in => 3..20 }
           validates :email, :presence => true, :uniqueness => true
           validates :password, :confirmation => true #password_confirmation attr
           validates_length_of :password, :in => 3..20, :on => :create
       end
    

    这是我的users_controller.rb

       class UsersController < ApplicationController
           def login
    
           end
    
           def create
               flash[:notice] = ''
               @user=User.new(user_params)
               if @user.valid?
                   @user.save
                   flash[:notice] = "You signed up successfully"
                   render 'users/login'
               else
                   flash[:error] = "Form is invalid"
                   render 'users/signup'
               end
    
           end
    
    
           def signup
               @user = User.new
               flash[:notice]=''
               flash[:error]=''
           end
    
       private
           def user_params
                 params.require(:user).permit(:name, :email, :password, :password_confirmation)
           end
    
       end
    

    这是我的signup.html.erb

       <div class = "content">
           <h1>Sign Up</h1>
           <p>Maecenas nisi nunc, vulputate ac tempus eget, suscipit ut sapien. Aenean fringilla ultricies ultricies. 
    Mauris aliquet nunc in velit posuere, in convallis purus ullamcorper. 
    Nam imperdiet lacus lacus, quis finibus diam dapibus a. Nullam quis accumsan libero. </p>
    
           <div class = "form_data">
                 <%= form_for(:user, :url => {:controller => 'users', :action => 'create'}) do |f| %>
                     <table>
                         <tbody> 
                            <tr>
                               <td> Name : </td>
                               <td> <%= f.text_field :name %> </td>
                            </tr>
                            <tr>
                               <td> Email : </td>
                               <td> <%= f.text_field :email %> </td>
                            </tr>
                            <tr>
                               <td> Password : </td>
                               <td> <%= f.password_field :password %> </td>
                            </tr>
                            <tr>
                               <td> Re-type Password : </td>
                               <td> <%= f.password_field :password_confirmation %> </td>
                            </tr>
                            <tr>
                               <td> </td>
                               <td> <%= f.submit :signup %> </td>
                            </tr>
    
                        </tbody>
                     </table>
                 <% end %>
    
            </div>
            <% flash.each do |name, msg| %>
                <%= content_tag :div, msg, :id => "flash_#{name}" %>
            <% end %>
    
       </div>
    

    问题2

    如何创建contact_details table (id, name, phonenumber, owner_id) user_ID用户表作为foreign key (owner_id)

    问题3

    如何创建良好和整洁的登录算法。赞赏任何教程链接

    问题4

    如何编辑Jruby/Ruby on rails中的选择查询,以便我可以根据记录的用户获取详细信息。

1 个答案:

答案 0 :(得分:1)

回答1

当您使用attr_accessor时,它告诉模型您不希望将这些属性保存在数据库中,而只是在应用程序中用作模型属性。删除下面的块,数据应保存正常。

begin
  attr_accessor :name, :email, :password, :password_confirmation
end

回答2

阅读此内容的最佳位置是Rails Guides, Active Record Associations。解释几乎没有比这更好。

这里有一个没有勺子喂食你需要做的事情的主旨是:

您需要使用参数生成UserDetail模型/脚手架。 id, name, phonenumber, user_id(注意使用user_id。这是外键的rails约定。)

您的模型声明将如下所示,

class User < ActiveRecord::Base
  has_one :user_detail     
end

class UserDetail < ActiveRecord::Base
  belongs_to :user
end

回答3

以下是Ryan Bates如何从头开始创建身份验证的最佳视频。 http://railscasts.com/episodes/250-authentication-from-scratch-revised

回答4

答案3中的视频也会回答这个问题,但基本上当您拥有该身份验证设置时,您可以通过执行操作获取详细信息 current_user.user_detail

<强>更新

刚刚意识到我发布的视频链接是专业视频,需要订阅。如果您已经有一个,如果您正在学习rails,我强烈推荐它,您应该能够看到它。如果没有,那里有很多 Authentication from scratch 教程,大部分都是基于该视频。以下任何会做。另外,仅供参考,该网站目前仅收取一个月的订阅费用,以下所有月份正在免费续订(截至撰写本文时)。对于高质量的学习材料来说,这是一个非常好的交易。