Ошибка маршрутизации на [POST] [Ruby on Rails] - PullRequest
0 голосов
/ 14 июня 2010

Сейчас я создаю приложение управления проектами в рельсах, вот некоторая справочная информация:

На данный момент у меня есть 2 модели, одна из которых является пользовательской, а другая - клиентской. Клиенты и пользователи имеют отношение один-к-одному (клиент -> has_one и пользователь -> own_to, что означает, что внешний ключ находится в таблице пользователей)

Итак, что я пытаюсь сделать, это когда вы добавляете клиента, вы можете фактически добавить учетные данные (добавить пользователя) к этому клиенту, для этого все клиенты отображаются со ссылкой рядом с именем этого клиента Это означает, что вы действительно можете создать учетные данные для этого клиента.

Итак, для этого я использую вспомогательную ссылку, как этот.

<%= link_to "Credentials", 
        {:controller => 'user', :action => 'new', :client_id => client.id} %>

То есть он будет построен следующим образом:

http://localhost:3000/clients/2/user/new

Путем создания пользователя для клиента с идентификатором 2. 2. 1013 *

И затем захватывает информацию в контроллер следующим образом:

@user = User.new(:client_id => params[:client_id])

РЕДАКТИРОВАТЬ: Это то, что у меня сейчас есть в моем виде / контроллере и маршрутах

Я получаю эту ошибку: нет маршрута "/ clients // user" с {: method =>: post}

Маршруты

ActionController::Routing::Routes.draw do |map|
  map.resources :users
  map.resources :clients, :has_one => :user
  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'
end

Контроллер

class UsersController < ApplicationController
  before_filter :load_client

  def new
    @user = User.new
    @client = Client.new
  end

  def load_client
    @client = Client.find(params[:client_id])
  end

  def create
    @user = User.new(params[:user])
    @user.client_id = @client.id
    if @user.save
      flash[:notice] = "Credentials created"
      render :new
    else
      flash[:error] = "Credentials created failed"
    render :new
   end
  end

View

   <% form_for @user, :url => client_user_url(@client)  do |f| %> 
        <p>
            <%= f.label :login, "Username" %>
            <%= f.text_field :login %>
        </p>
        <p>
            <%= f.label :password, "Password" %>
            <%= f.password_field :password %>
        </p>

        <p>
            <%= f.label :password_confirmation, "Password Confirmation" %>
            <%=  f.password_field :password_confirmation %>
        </p>

        <%= f.submit "Create", :disable_with => 'Please Wait...' %>

    <% end %>

Ответы [ 2 ]

0 голосов
/ 16 июля 2010

Я решил эту проблему, используя вложенные атрибуты, включая пользовательскую модель, при создании клиента. И работает без нареканий.

На случай, если кому-то из вас понадобится больше информации, вот два скринкаста, которые помогли мне найти решение:

http://railscasts.com/episodes/196-nested-model-form-part-1

http://railscasts.com/episodes/196-nested-model-form-part-2

0 голосов
/ 14 июня 2010

Ваш тег формы неправильный, вы публикуете на /users без :client_id.

Попробуйте:

<% form_for @user, :url => {:controller => 'users', :action => 'new', :client_id => @client.id} do |f| >

В качестве альтернативы вы можете использовать вложенные ресурсы:

config / rout.rb

map.resources :clients do |clients|
  clients.resources :users
end

Контроллер

class UsersController < ApplicationController
  before_filter :load_client

  def load_client
    @client = Client.find(params[:client_id])
  end

  # Your stuff here
end

Просмотр

<% form_for [@client, @user] do |f| %>
...