我在提交简单表单时遇到问题,而且我不完全确定这笔交易是什么。我认为问题在于,我正在尝试将用户个人资料页面中的表单提交给另一个模型(ItemShare)。它不是通过邮件提交表单,而是尝试发出GET请求。当我改变了ItemSharesController以允许这个时,它将ItemShare #index放入我的模态形式,即使我已经指定了我希望它发布的十亿个地方。 POST!
在我的routes.rb中:
match '/item_shares' => 'item_shares#create', :via => :post
resources :item_shares, :except => :create
表格:
#share-list-button-dialog.modal.hide.fade{:role => "dialog"}
.modal-dialog
%h3 Share List
.modal-body
=form_for(ItemShare.new, :method => :post, :url => {:action => "create"}) do |f|
=f.hidden_field(:item_id, :value => item.token)
=f.hidden_field(:owner_id, :value =>user.id)
=f.label :shared_user_email, "Your collaborator's email:"
=f.text_field :shared_user_email, :value => "collaborator@example.com"
=f.submit "Share"
ItemSharesController:
class ItemSharesController < ApplicationController
def new
@item_share = ItemShare.new
end
def create
@item_share = ItemShare.new(params[:item_share])
respond_to do |format|
if @item_share.save
format.html {redirect_to user_path(current_user.id), :notice => "List shared successfully"}
else
flash.now[:alert] = "Could not share list."
end
end
end
end
这就是堆栈跟踪显示的内容:
Started GET "/item_shares/" for 127.0.0.1 at 2013-10-15 21:40:44 -0400
ActionController::RoutingError (No route matches [GET] "/item_shares"):
actionpack (3.2.11) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
...
这里发生了什么?
更新 ...终于知道了什么。 表单本身不是问题,但我用来触发模态表单的按钮。我有:
%button{'data-toggle' => 'modal', 'href' => '../item_shares/', 'data-target' => '#share-list-button-dialog'}
。
将其更改为:
=button_to "Share", item_shares_path, "data-toggle" => "modal", "data-target" => "#share-list-button-dialog"
现在一切正常。非常感谢Helios de Guerra的帮助和耐心。 :)
答案 0 :(得分:0)
乍一看,我会说这与=form_for(ItemShare.new
根据我的经验,Rails从form_for中的url构建路径,这意味着你的内容会被搞砸。您可能想尝试一下:
#users/new
def new
@item_share = ItemShare.new
end
#form
=form_for(@item_share
我对此并不完全确定,但这是我的预感
答案 1 :(得分:0)
根据您的描述,您应该只使用标准惯例。
路线:
resources :item_shares
形式:
<%= form_for(ItemShare.new) do |f| %>
...
<% end %>
如果不起作用,请检查呈现页面的来源。表单标记应包含以下内容:
<form accept-charset="UTF-8" action="/item_shares" id="new_item_share" method="post">