2013-10-06 2 views
0

Я создал простых пользователей MVC, где люди могут вводить свой адрес электронной почты, чтобы присоединиться к нашему списку рассылки. он работает отлично. Единственная проблема заключается в том, что я хочу отобразить представление на главной странице. Я пытаюсь просто поставить <% = визуализации «пользователей/новый»%> в моей странице 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 

это мой пользователь/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: "[email protected]" %> 
    <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+\-.][email protected][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

Я полагаю, что это опечатка, но ваша частичная часть должна быть в 'users' not' user', также попробуйте изменить ее имя на '_new.html.erb' - с подчеркиванием. – zrl3dx

ответ

0

Partials должны начинаться с символа подчеркивания. Это соглашение. Поэтому в папке app/views/users/ должен быть файл с именем _new.html.erb.

+0

Это не конвенция; вы * имеете * для этого. –

+0

, что на самом деле не совсем так, вы можете написать свой собственный резольвер и передать рельсы в stfu. есть несколько очень приятных примеров от jose valim в разработке приложений для рельсов: http://blog.plataformatec.com.br/2011/04/default-views-in-rails-3-0-with-custom-resolvers/ – phoet

+0

, поэтому когда я меняю new.html.erb на _new.html.erb Я получаю новую ошибку с указанием неопределенного метода 'model_name 'для NilClass: Class, и он также говорит теперь, даже когда я добрался до http://0.0.0.0:3000/users/new говорит, что шаблон отсутствует. Итак, как мне определить модель, чтобы мои просмотры index.html.erb подбирали ее? –

0

Рельсы не очень хороши с точки зрения сообщений об ошибках. как @Agis уже ответил, реальная проблема здесь в том, что она ищет файл, начинающийся с подчеркивания.

Если вы используете метод render в представлении, он ищет частичные по умолчанию. см. документацию здесь: http://apidock.com/rails/ActionView/Helpers/RenderingHelper/render

это отличается от вызова render в действии, где шаблон представления будет отображаться с помощью макета.

В любом случае, вы обычно не просто повторно используете представление как частичное. это довольно редко для этого, поэтому вы извлекаете часть своего представления в частичное и повторно используете это, то есть форму входа или что-то в этом роде.

Надеюсь, это поможет вам с базовым пониманием рельсов.

+0

поэтому, когда я изменяю new.html.erb на _new.html.erb Я получаю новую ошибку с указанием неопределенного метода 'model_name 'для NilClass: Class, и он также говорит теперь, даже когда я добрался до 0.0.0.0:3000/users/new, он говорит, что шаблон отсутствует. Итак, как мне определить модель, чтобы мои просмотры index.html.erb подбирали ее? –

+0

Я положил свою модель выше –

+0

, так как ваш '@ user' - это потому, что он установлен в' SessionController', я думаю. вам придется установить его в каждом контроллере, который вы делаете частичным. простым способом было бы просто установить его в форме, написав 'User.new' вместо' @ user' – phoet

Смежные вопросы