这可能无法回答,因为这里可能有太多变量,但我想我会试一试,因为我总是在这里找到其他答案。我对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]
希望有人知道我做错了什么,或者我想我已经开始了。
答案 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对象。