Ошибка маршрутов на [POST] [RUBY на Rails
-
27-09-2019 - |
Вопрос
Прямо сейчас я создаю приложение для управления проектами в Rails, вот некоторые фоновые информации:
Прямо сейчас у меня есть 2 модели, один - пользователь, а другой - клиент. Клиенты и пользователи имеют отношения в одну к одному (клиент -> has_one и user -> принадлежат_to что означает, что внешний ключ в таблице пользователей)
Итак, что я пытаюсь сделать это, как только вы добавляете клиента, вы можете на самом деле добавить учетные данные (добавить пользователя) на этот клиент, чтобы все, что все клиенты отображаются со ссылкой рядом с именем этого клиента, что означает, что вы может на самом деле создавать учетные данные для этого клиента.
Таким образом, чтобы сделать это, я использую хелперную ссылку, чтобы помощник подобного этому.
<%= link_to "Credentials",
{:controller => 'user', :action => 'new', :client_id => client.id} %>
Это означает, что URL-адрес будет построен так:
http://localhost:3000/clients/2/user/new
Создавая пользователя для клиента с помощью ID 2.
А затем захватить информацию в контроллер, как это:
@user = User.new(:client_id => params[:client_id])
Редактировать: Это то, что у меня в настоящее время есть на моем просмотре / контроллере и маршрутах
Я продолжаю получать эту ошибку: нет маршрутных матчей "/ клиентов // Пользователь" с {: метод =>: 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
Вид
<% 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
Я решил это с помощью вложенных атрибутов, включая модель пользователя при создании клиента. И это работает безупречно.
В случае, если кто-либо из вас, ребята, нужно больше информации, вот два скринкаста, которые помогли мне придумать как решение:
http://railscasts.com/episodes/196-nested-model-form-part-1.
http://raailscasts.com/episodes/196-nested-model-form-part-2.
Другие советы
Тег вашей формы неверна, вы публикуете /users
без :client_id
.
Попробуй это:
<% form_for @user, :url => {:controller => 'users', :action => 'new', :client_id => @client.id} do |f| >
В качестве альтернативы, вы можете использовать вложенные ресурсы:
config / marrings.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| %>