Rails 3 Render / Partial - PullRequest
       1

Rails 3 Render / Partial

3 голосов
/ 07 апреля 2011

Я очень новичок в Rails 3, и я следовал некоторым учебникам, и теперь я пытаюсь "поиграть" с созданным кодом. Я следовал учебнику от http://guides.rubyonrails.org/getting_started.html

Я пытаюсь отобразить форму для новых сообщений на главной странице с этим кодом:

<%= render :partial => "posts/form" %>

posts / _form.html.erb выглядит следующим образом:

<%= form_for(@post) do |f| %>
  <% if @post.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>

      <ul>
      <% @post.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.label :content %><br />
    <%= f.text_area :content %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

и вот ошибка, которую я получаю:

 undefined method `model_name' for NilClass:Class
Extracted source (around line #1):

1: <%= form_for(@post) do |f| %>
2:   <% if @post.errors.any? %>
3:     <div id="error_explanation">
4:       <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>
Trace of template inclusion: app/views/home/index.html.erb

Rails.root: d:/server/cazare

Application Trace | Framework Trace | Full Trace
app/views/posts/_form.html.erb:1:in `_app_views_posts__form_html_erb___794893824_70478136_519766'
app/views/home/index.html.erb:5:in `_app_views_home_index_html_erb__967672939_70487520_0'

Я понимаю, что для некоторых из вас это может показаться несложным, но я пытаюсь понять, как все работает на Rails, поэтому я надеюсь, что вы меня поймете.

Заранее спасибо!

Ответы [ 3 ]

5 голосов
/ 07 апреля 2011

@ переменная post не создается в контроллере :)

так что "@post = Post.new" внутри действия контроллера должно сработать

1 голос
/ 07 апреля 2011

Rails пытается создать форму для объекта @post.Для этого ему необходимо знать, что это за объект @post;Таким образом, он может найти любые существующие данные в объекте и заполнить их в форме для вас.В Rails есть метод, привитый к объектам model_name для поиска, но он не будет привит к NilClass (классу объекта nil).

Я подозреваю, что у вас нет@post нигде не определено - это переменная экземпляра контроллера, поэтому можно ожидать, что контроллер либо найдет @post из базы данных, либо вызовет @post = Post.new - так что nil.

0 голосов
/ 29 ноября 2012

В posts / _form.html.erb,

изменить

 <%= form_for(@post) do |f| %>

на

<%= form_for(Post.new) do |f| %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...