Ruby on rails登陆页面

时间:2014-08-11 06:41:09

标签: ruby-on-rails ruby

我有一个极端基本的rails 4应用程序。这就像一个登陆页面,其中包含一个从youtube嵌入的视频,并为用户提供了一个字段,用于放置他的电子邮件和邮政编码...

所以,我很难保存这个用户的电子邮件和邮政编码,实际上,我是rails的新手,我不知道该怎么做...我创建了一个名为Information的模型,带有电子邮件和邮政编码(两者都有)字符串)...我有一个名为home的视图,其中包含以下代码:

    <%= form_for :information do |f| %>
  <div class="form-group">
       <%= f.label :Email_address %>
       <%= f.text_field :email, class: "form-control", :autofocus => true, placeholder: "Enter email" %>
  </div>

  <div class="form-group">
       <%= f.label :Zip_Code %>
       <%= f.text_field :zipcode, class: "form-control", :autofocus => true, placeholder: "Zip Code" %>
  </div>

  <div class="form-group">
        <%= f.submit "Submit", class: "btn btn-danger" %>
  </div>
<% end %>

但是当我点击提交没有任何反应时,我想我应该创建一个控制器,但我不知道该怎么做才能让它工作!我该怎么做以最好的方式收集这两个信息?非常感谢!

2 个答案:

答案 0 :(得分:2)

您需要具有两个操作的控制器::new:create。 在控制台rails g controller informations中(我假设您的模型名为Information)。 在此文件中

def new
  @information = Information.new
end

def create
  @information = Information.new(information_params)
  redirect_to @information
end

private

def information_params
 params.require(:information).permit(:email, :zipcode)
end

然后,此代码应作为/view/informations/new

进入new.erb
<%= form_for @information do |f| %>
  <div class="form-group">
       <%= f.label :Email_address %>
       <%= f.text_field :email, class: "form-control", :autofocus => true, placeholder: "Enter email" %>
  </div>

  <div class="form-group">
       <%= f.label :Zip_Code %>
       <%= f.text_field :zipcode, class: "form-control", :autofocus => true, placeholder: "Zip Code" %>
  </div>

  <div class="form-group">
        <%= f.submit "Submit", class: "btn btn-danger" %>
  </div>
<% end %>

并查看一些快速教程,以便对MVC如何建立有基本的了解。本指南http://www.railstutorial.org/book几乎是每个人的开始。

答案 1 :(得分:1)

让我为你解释一些事情,因为你是新的


<强>物件

Ruby(由于基于Ruby而构建的&Rails)是object orientated。这意味着您使用Rails后端进行的每次交互(着陆页最初都不与后端交互)必须以对象为中心

虽然您通过创建相应的对象(使用Information模型)做得很好,但您需要了解创建,填充和创建的进程。初始化尊重对象

-

<强>表格

您正在使用form_for 要求一个ActiveRecord对象。这是您的主要垮台 - 比如您的目标网页位于application#welcome,这是

#app/controllers/application_controller.rb
Class ApplicationController < ActionController::Base
   def welcome
      @information = Information.new #-> creates "information" object
   end
end

然后form_for方法可以获取@information对象,根据需要填充数据:

#app/views/application/welcome.html.erb
<%= form_for @information do |f| %>
   <%= f.text_field :email %>
   <%= f.text_field :zipcode %>
   <%= f.submit %>
<% end %>

注意你在这里如何使用@information对象?这是ActiveRecord对象的来源 - 允许您根据需要“填充”

-

<强>后端

#config/routes.rb
root: "application#welcome"
resources :information, only: :create

form_for会将您的请求发送至information_controller.rb

#app/controllers/information_controller.rb
Class InformationController < ApplicationController
   def create
      @information = Information.new(information_params)
      if @information.save
         flash[:notice] = "Message Sent - Thank you!"
         redirect_to "application#welcome"
      end
   end

   private

   def information_params
       params.require(:information).permit(:email, :zipcode)
   end
end

这将能够获取@information对象,将其填充到数据库中,然后再次重定向到原始的“登陆”页面。