我创建了一个简单的用户MVC,人们可以输入他们的电子邮件以加入我们的邮件列表。它似乎工作得很好。唯一的问题是我想在主页上显示视图。我想简单地把<%= render'users / new'%>在我的index.html.erb页面中但它一直给我一个错误
Missing partial users/new with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in:
* "/Users/jeff/Desktop/selfstarter/app/views"
Extracted source (around line #4):
1: <%= render 'preorder/homepage/show_dont_tell' %>
2: <%= render 'preorder/homepage/key_points' %>
3: <%= render 'preorder/homepage/other_points' %>
4: <%= render 'users/new' %>
5:
6: <%#<%= render 'preorder/homepage/middle_reserve' %>
7: <%#<%= render 'preorder/homepage/faqs' %>
我听说过我可能想把它变成局部但是如何将我的视图转换成可用的部分?
这是我的路线档案
Selfstarter::Application.routes.draw do
resources :users
match '/signup', to: 'users#new'
get "users/new"
get "static_pages/about"
get "static_pages/FAQ"
root :to => 'preorder#index'
match '/preorder' => 'preorder#index'
get 'preorder/checkout'
match '/preorder/share/:uuid' => 'preorder#share', :via => :get
match '/preorder/ipn' => 'preorder#ipn', :via => :post
match '/preorder/prefill' => 'preorder#prefill'
match '/preorder/postfill' => 'preorder#postfill'
end
这是我的users_controller文件
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
UserMailer.registration_confirmation(@user).deliver
flash[:success] = "Welcome to the Island Mailing List!"
redirect_to root_path
else
render 'new'
end
end
end
这是我的user / new.html.erb文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<link rel="shortcut icon" href="../../assets/ico/favicon.png">
<title>Jumbotron Template for Bootstrap</title>
<!-- Bootstrap core CSS -->
<link href="../../dist/css/bootstrap.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="jumbotron.css" rel="stylesheet">
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="../../assets/js/html5shiv.js"></script>
<script src="../../assets/js/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class= "jumbotron">
<div class="container">
<div class="row">
<div class="col-lg-6">
<%= form_for(@user) do |f| %>
<%= render 'shared/error_messages' %>
<div class="input-group">
<%= f.text_field :email, class: "form-control", placeholder: "YouEmailAdress@gmail.com" %>
<span class="input-group-btn">
<%= f.submit "Follow Project", class: "btn btn-large btn-primary" %></span>
<% end %>
</div><!-- /input-group -->
</div><!-- /.col-lg-6 -->
</div><!-- /.row -->
</div><!--/container -->
</div><!-- /jubotron -->
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="../../assets/js/jquery.js"></script>
<script src="../../dist/js/bootstrap.min.js"></script>
</body>
</html>
我认为这与我的路线及其设置方式有关。我一直在寻找解决方案。我觉得它很容易。正如你所知道的那样,我对铁轨上的红宝石很新。
谢谢!
模型用户
这是我的用户模型
# == Schema Information
#
# Table name: users
#
# id :integer not null, primary key
# email :string(255)
# created_at :datetime not null
# updated_at :datetime not null
#
class User < ActiveRecord::Base
attr_accessible :email
before_save { |user| user.email = email.downcase }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, length: { maximum:80 },
format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false }
end
答案 0 :(得分:0)
部分必须以下划线为前缀。这是一个惯例。因此,_new.html.erb
文件夹中应该有一个名为app/views/users/
的文件。
答案 1 :(得分:0)
rails在错误消息方面并不是很好。就像@Agis已经回答的那样,真正的问题是,它正在寻找以下划线开头的文件。
如果您在视图中使用render
方法,则默认情况下会查找partials。请查看此处的文档:http://apidock.com/rails/ActionView/Helpers/RenderingHelper/render
这与在动作中调用render
不同,其中视图模板将使用布局呈现。
在任何情况下,您通常不会仅仅将视图重新用作部分视图。这样做非常罕见,因此您将视图的某些部分提取为部分视图并重新使用,即登录表单或类似内容。
我希望这能帮助您对rails有一个基本的了解。