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

Ruby on rails Login form not saving attributes and login workflow

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

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

我正在使用

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

问题 1

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

这是我的作品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),用户 table 的 user_ID 作为 foreign key (owner_id)

问题 3

如何创建简洁明了的登录算法。感谢任何指向教程的链接

第 4 题

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

回答 1

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

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

回答2

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

以下是您在不使用勺子喂食的情况下需要做的事情的要点:

您需要使用参数生成 UserDetail model/scaffold。 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

更新

刚刚发现我发布的视频 link 是专业视频,需要订阅。如果你已经有了,正在学习的我强烈推荐rails,你应该能看到。如果没有,那里有很多 Authentication from scratch 教程,大部分都基于该视频。跟随任何一个都行。另外仅供参考,该网站目前只收取一个月的订阅费用,接下来的所有月份目前都免费续订(截至撰写本文时)。因此,对于高质量的学习来说,这是一笔非常划算的交易 material。