渲染不渲染右页

时间:2010-07-22 04:08:16

标签: ruby-on-rails ruby render

这可能无法回答,因为这里可能有太多变量,但我想我会试一试,因为我总是在这里找到其他答案。我对rails来说还是个新手。

所以,我有一个账单模型/控制器/视图。我想创建一个新法案。我将编辑那些不重要的东西,但如果需要它我可以添加它们 - 只是不想要一面文字。

在路线中:

map.resources :bills

我在控制器中的新方法:

def new
    @bill = Bill.new
    @submit_txt = "Create"

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

我的表格:

<% form_for(@bill) do |f| %>
        <%= f.error_messages %>
 ### form elements here, this all seems fine ####
        <p>
          <%= f.submit @submit_txt %>
        </p>
    <% end %>

我在控制器中创建的方法:

def create
    is_weekly = false
    is_monthly = false

    @bill = current_user.recurring_bills.build(params[:bill])
    @bill.year = @current_year

    @errors = 'checking this out'

    if @errors.blank?
      logger.info "no errors, supposedly; going to save"

     ### do saving stuff here####
    else
      logger.info "errors not blank"
      render :action => :new
    end
end

出于某种原因,这总是呈现/账单而不是/ bills / new。它曾经工作,我不知道我做错了什么,但现在不是。我得到了与render相同的响应:template =&gt; “票据/新”。它带有重定向到正确的页面,但是它不会用旧值填充表单。

日志:

Processing BillsController#create (for 127.0.0.1 at 2010-07-21 21:00:47) [POST]
  Parameters: {"commit"=>"Create", "action"=>"create", "authenticity_token"=>"Kc7/iPKbfJBKHHVARuN7K6207tW6Jx4OUn7Xb4uSB8A=", "bill"=>{"name"=>"rent", "month"=>"", "amount"=>"200", "alternator"=>"odd", "day"=>"35", "frequency"=>"monthly", "weekday"=>""}, "controller"=>"bills"}
  User Load (0.6ms)   SELECT * FROM "users" WHERE ("users"."remember_token" = 'dd7082c56f5a252d14e4e68c528eb26551875c647f998c15d16a064cb075d63c') LIMIT 1
errors not blank
Rendering template within layouts/application
Rendering bills/new
Rendered bills/_form (14.5ms)
Rendered layouts/_stylesheets (3.3ms)
Rendered layouts/_header (5.7ms)
Rendered layouts/_footer (0.3ms)
Completed in 174ms (View: 30, DB: 1) | 200 OK [http://localhost/bills]

希望有人知道我做错了什么,或者我想我已经开始了。

2 个答案:

答案 0 :(得分:1)

从命令行运行rake:routes,您将看到它们如何映射。

    bills GET    /bills(.:format)          {:controller=>"bills", :action=>"index"}
          POST   /bills(.:format)          {:controller=>"bills", :action=>"create"}
 new_bill GET    /bills/new(.:format)      {:controller=>"bills", :action=>"new"}
edit_bill GET    /bills/:id/edit(.:format) {:controller=>"bills", :action=>"edit"}
     bill GET    /bills/:id(.:format)      {:controller=>"bills", :action=>"show"}
          PUT    /bills/:id(.:format)      {:controller=>"bills", :action=>"update"}
          DELETE /bills/:id(.:format)      {:controller=>"bills", :action=>"destroy"}

RESTful资源需要一点点习惯,但在您的情况下\bills使用post方法进入创建操作。您在create操作中指定在调用new时呈现render :action => :new模板的内容 - 您实际上并未执行此操作。

答案 1 :(得分:0)

试试这个:

render :new

来自文档:

  

使用render with:action是Rails新手的常见混淆源。指定的操作用于确定要呈现的视图,但Rails不会在控制器中运行该操作的任何代码。在调用render之前,必须在当前操作中设置视图中所需的任何实例变量。

试一试,让我们知道它是怎么回事。此外,如果您渲染“new”,请记住您的新操作会创建一个新的Bill对象,并且不会有任何旧的值来填充。我认为您真正想要做的是渲染:编辑。在编辑操作中,找到带有传递给操作的参数的Bill对象。