开发者

What would cause an action in my Ruby on Rails controller to be called repeatedly?

Helllo. I'm diving into RoR and, after installing Paperclip and setting up my code to adapt to it, the new method in one of my controllers is causing a StackOverflow ;) . I'm running Rails 3.0 and Ruby 1.8.7. Can anyone guess or tell me what could be causing my new action to be called repeatedly?

Here's the server output...

Started GET "/projects/new" for 127.0.0.1 at Mon Oct 18 19:25:42 -0500 2010
  Processing by ProjectsController#new as HTML
Completed   in 1192ms

SystemStackError (stack level too deep):
  app/controllers/projects_controller.rb:27:in `new'
  app/controllers/project开发者_Go百科s_controller.rb:27:in `new'
  app/controllers/projects_controller.rb:30:in `new'
  app/controllers/projects_controller.rb:29:in `new'
  .
  . 
  .
Rendered /Library/Ruby/Gems/1.8/gems/actionpack-3.0.1/lib/action_dispatch/middleware/templates/rescues/_trace.erb (3.6ms)
Rendered /Library/Ruby/Gems/1.8/gems/actionpack-3.0.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (4.3ms)
Rendered /Library/Ruby/Gems/1.8/gems/actionpack-3.0.1/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (63.9ms)

Here's my controller code...

def new
    @project = Project.new

    respond_to do |format|
      format.html new.html.erb
      format.xml  { render :xml => @project }
    end
  end

Here's my view code for the new template...

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

      <ul>
      <% @project.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 :tech_used %><br />
    <%= f.text_field :tech_used %>
  </div>
  <div class="field">
    <%= f.label :owner %><br />
    <%= f.text_field :owner %>
  </div>
  <div class="field">
    <%= f.label :created %><br />
    <%= f.date_select :created %>
  </div>
 <div class="field">
  <%= f.file_field :thumbnail %>
 </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

Thanks for your help!


Use the following:

def new
  @project = Project.new

  respond_to do |format|
    format.html
    format.xml  { render :xml => @project }
  end
end

With format.html new.html.erb, you're invoking the new method again; if it ever returned you'd be invoking the .html method, which would cause a method-not-found error. Instead it recursively calls new until you run out of memory.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜