- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在这里使用简单表单,但这也是普通 Rails 表单的问题。使用浅层路由时,form_for 需要不同的参数,具体取决于使用的上下文。
示例:为了编辑 (http://localhost:3000/notes/2/edit
),_form.html.erb 需要有 simple_form_for(@note)
。但要创建新注释(http://localhost:3000/customers/2/notes/new
)_form.html.erb 需要 simple_form_for([@customer, @note])
。如果其中任何一个接收到错误的参数,我将收到“找不到方法”错误。
处理这个问题的最佳方法是什么?
这些是我唯一的选择吗?
示例如下:
config/routes.rb
Billing::Application.routes.draw do
resources :customers, :shallow => true do
resources :notes
end
end
耙动路线 | grep 注释
customer_notes GET /customers/:customer_id/notes(.:format) notes#index
POST /customers/:customer_id/notes(.:format) notes#create
new_customer_note GET /customers/:customer_id/notes/new(.:format) notes#new
edit_note GET /notes/:id/edit(.:format) notes#edit
note GET /notes/:id(.:format) notes#show
PUT /notes/:id(.:format) notes#update
DELETE /notes/:id(.:format) notes#destroy
app/views/notes/_form.html.erb
# v----------------------------- Right here
<%= simple_form_for (@note), html: { class: 'form-vertical'} do |f| %>
<%= f.input :content %>
<%= f.button :submit %>
<% end -%>
app/views/notes/new.html.erb
<h1>New note</h1>
<%= render 'form' %>
<%= link_to 'Back', customer_path(@customer) %>
app/views/notes/edit.html.erb
<h1>Editing note</h1>
<%= render 'form' %>
<%= link_to 'Show', @note %>
<%= link_to 'Back', customer_path(@customer) %>
app/controllers/notes_controller.rb
class NotesController < ApplicationController
def show
@note = Note.find(params[:id])
@customer = Customer.find(@note.customer_id)
respond_to do |format|
format.html
format.json {render json: @note }
end
end
# GET /notes/new
# GET /notes/new.json
def new
@note = Note.new
@customer = Customer.find(params[:customer_id])
respond_to do |format|
format.html # new.html.erb
format.json { render json: @note }
end
end
# GET /notes/1/edit
def edit
@note = Note.find(params[:id])
@customer = Customer.find(@note.customer_id)
end
# POST /notes
# POST /notes.json
def create
@customer = Customer.find(params[:customer_id])
@note = @customer.notes.build(params[:note])
respond_to do |format|
if @note.save
format.html { redirect_to @customer, notice: 'Note was successfully created.' }
format.json { render json: @note, status: :created, location: @note }
else
format.html { render action: "new" }
format.json { render json: @note.errors, status: :unprocessable_entity }
end
end
end
# PUT /notes/1
# PUT /notes/1.json
def update
@note = Note.find(params[:id])
@customer = Customer.find(@note.customer_id)
respond_to do |format|
if @note.update_attributes(params[:note])
format.html { redirect_to @customer, notice: 'Note was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @note.errors, status: :unprocessable_entity }
end
end
end
# DELETE /notes/1
# DELETE /notes/1.json
def destroy
@note = Note.find(params[:id])
@note.destroy
respond_to do |format|
format.html { redirect_to :back }
format.json { head :no_content }
end
end
end
最佳答案
如果传递给表单构建器的数组中的第一个对象是nil
,Rails 将仅 POST 到第二个对象。因此,不要在 Controller 的编辑操作中设置 @customer
对象。如果您需要访问客户对象,请通过@note
调用。
如果您对新建和编辑使用相同的部分,则需要在 Controller 的新操作中设置 @note.customer
(@customer
won'编辑时无需设置)。
我认为这就是 Rails 团队希望它发挥作用的方式。
关于ruby-on-rails-3 - 使用浅层路由时,不同的路由需要不同的 form_for 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9772588/
是 {:action => 'update', :id => @product.id})) do |f| %> ... 和 {:action => 'update', :id => @pro
我实现了一个表单文本字段字符计数器,它可以在 jsfiddle 中工作,但不能在应用程序中工作。它会出现,但不会像在 jsfiddle 中那样实时计数。当我重新加载页面时,它将计算文本字段中的当前字符
我正在尝试创建一个只有一个文本字段和一个隐藏字段的表单,我将在将数据传递到 HTTP API 时使用该字段,因此我没有与之关联的模型,并且通过扩展,没有变更集。 是否可以做到这一点并使用 form_f
我的表单如下所示: ~~~form stuff~~~ { disable_with: "Processing" }, :class => "btn btn-info
我需要将表单提交到外部 URL,所以我有这个: form_for(@task, :url => "https://www.external.com/Submit") do |f|) @ass
我有两个模型: 品牌 has_many :products 产品 belongs_to :brand 在我看来 (show_brand.html.erb),我使用 @brand.name ... 显示
我在财务模块中有以下模型: class Finance::BillRec :destroy ... end class Finance::BillRecOff ... 路线.rb nam
我写了以下代码:- 翻译成 我的 routes.rb 文件包含以下代码:- root 'static_pages#home' get 'contact'=>'static_pages#conta
我正在试验嵌套资源: 我的路线: resources :conversations do resources :replies do resources :comments
我的项目是这样组织的:用户是主要资源,每个用户都有一个配置文件,每个配置文件都有一个位置,如下所示: resources :users do resource :profile, :c
我有一个表单,提交后会运行 sidekiq 工作程序。目前,如果您在空表单上单击“提交”,它会尝试运行工作程序。我想要的是它提醒用户在提交之前需要填写这些字段。 我尝试将 :required => t
我有一个关于 form_for 和嵌套资源的两部分问题。假设我正在编写一个博客引擎,并且我想将评论与文章相关联。我定义了一个嵌套资源,如下所示: map.resources :articles do
我想要一个 form_for @user,但要发布到用户 Controller 中的自定义操作。 我该怎么做? 最佳答案 form_for @user, :url => url_for(:contro
我有一个 Rails form_for html 元素。该表单有一个调用 JavaScript 函数的 onsubmit 属性。 onsubmit 工作正常,但是当我添加额外的参数时,js 函数不再受
我试图在提交之前验证我的 form_for 中所有必需的字段是否已完成,并且已完成 95%,但在检查和发出警报之前它仍然会提交。 这是表单的开头: {:id => "new_listing", :o
如果有更好的方式来表达这个问题,或者有更好的方式来做到这一点,请告诉我。 我想使用模态的 form_for 更新一些模型。用户单击“编辑”和带有字段的模式弹出窗口,然后可以单击提交或取消。我可以做到这
我正在尝试在 Rails 中使用客户端验证 Gem。我的表单一直在查找,直到将 `:validate => true"添加到我的 form_for 中。然后我收到一条错误消息,告诉我我编写它的方式是错
我在父 View 中有一个 div,它呈现 show 部分。在这个 show 部分中,我有一个按钮应该更改父部分的部分以呈现“form”部分以编辑对象,但我一直被卡住,因为似乎“form”部分的 fo
我正在使用 form_for 创建一个具有 1 个输入字段和 1 个按钮的表单。我希望提交按钮位于输入字段旁边而不是下方。 相关代码为: .input{border: 1px solid #66666
对于我下面的表格,如何防止表格跳到下一行?我查看了 Bootstrap 类“form-inline”,但似乎没有用,因为它禁用了我的表单。 Hello World! 这导致:
我是一名优秀的程序员,十分优秀!