加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 将表单提交路由到不同的控制器

发布时间:2020-12-16 21:08:37 所属栏目:百科 来源:网络整理
导读:如何在表单提交中指定Controller和Action?我正在尝试使用“客户端”控制器来创建帐户和关联人员(“客户”). 以下是相关模型.一个人直接属于账户(我称之为“客户”)或账户中的位置和组织. class Account ActiveRecord::Base has_many :organizations has_man
如何在表单提交中指定Controller和Action?我正在尝试使用“客户端”控制器来创建帐户和关联人员(“客户”).

以下是相关模型.一个人直接属于账户(我称之为“客户”)或账户中的位置和组织.

class Account < ActiveRecord::Base
    has_many :organizations
    has_many :persons,:as => :linkable

    accepts_nested_attributes_for :organizations
end

class Person < ActiveRecord::Base
    belongs_to :linkable,:polymorphic => true
end

以下是创建“客户端”的表单,我试图与其余代码一起制作:

<%= form_for @account,:url => { :controller => "clients_controller",:action => "create" } do |f| %>

<%= f.fields_for :persons do |builder| %>
    <%= builder.label :first_name %><br />
    <%= builder.text_field :first_name %><br />
    <%= builder.label :last_name %><br />
    <%= builder.text_field :last_name %><br />
    <%= builder.label :email1 %><br />
    <%= builder.text_field :email1 %><br />
    <%= builder.label :home_phone %><br />
    <%= builder.text_field :home_phone %><br />         
  <% end %>

  <%= f.submit "Add client" %>
<% end %>


class ClientsController < ApplicationController

  def new
      @account = Account.new
      @person = @account.persons.build
  end

  def create
      @account = Account.new(params[:account])
      if @account.save
          flash[:success] = "Client added successfully"
          render 'new'
      else
          render 'new'
      end
  end

end

以下是我的路线:

ShopManager::Application.routes.draw do

resources :accounts
resources :organizations
resources :locations
resources :people
resources :addresses

get 'clients/new'
post 'clients'

end

在尝试呈现表单时,我收到以下错误:

ActionController::RoutingError in Clients#new

Showing C:/Documents and Settings/Corey Quillen/My  
Documents/rails_projects/shop_manager/app/views/clients/new.html.erb where line #1   
raised:

No route matches {:controller=>"clients_controller",:action=>"create"}
Extracted source (around line #1):

1: <%= form_for @account,:action =>    
   "create" } do |f| %>
2: 
3:   <%= f.fields_for :persons do |builder| %>
4:  <%= builder.label :first_name %><br />

解决方法

你必须在routes.rb中这样说
resources :clients

在表单中,将url指定为clients_path,方法为post:

<%= form_for @account,:url => clients_path,:html => {:method => :post} do |f| %>
 ---
<% end

有关rails如何处理REST URL的更多信息:http://microformats.org/wiki/rest/urls

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读