我有一个极端基本的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 %>
但是当我点击提交没有任何反应时,我想我应该创建一个控制器,但我不知道该怎么做才能让它工作!我该怎么做以最好的方式收集这两个信息?非常感谢!
答案 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
对象,将其填充到数据库中,然后再次重定向到原始的“登陆”页面。