خطأ في الطرق [post] [Ruby on Rails
-
27-09-2019 - |
سؤال
الآن أقوم ببناء تطبيق لإدارة المشاريع في Rails ، إليك بعض المعلومات الأساسية:
الآن لدي نموذجان ، أحدهما مستخدم والآخر عميل. لدى العملاء والمستخدمين علاقة فردية (عميل -> HAS_ONE و user -> ينتمي إلى ما يعني أن المفتاح الخارجي في جدول المستخدمين)
لذا فإن ما أحاول القيام به هو بمجرد إضافة عميل ، يمكنك بالفعل إضافة بيانات اعتماد (إضافة مستخدم) إلى هذا العميل ، من أجل القيام بذلك يتم عرض جميع العملاء مع رابط بجوار اسم العميل بمعنى أنه يمكن في الواقع إنشاء بيانات اعتماد لهذا العميل.
لذلك من أجل القيام بذلك ، أستخدم مساعدًا على الرابط إلى المساعد مثل هذا.
<%= link_to "Credentials",
{:controller => 'user', :action => 'new', :client_id => client.id} %>
بمعنى أنه سيتم بناء عنوان URL على هذا النحو:
http://localhost:3000/clients/2/user/new
عن طريق إنشاء المستخدم للعميل مع معرف 2.
ثم التقاط المعلومات في وحدة التحكم مثل هذا:
@user = User.new(:client_id => params[:client_id])
تحرير: هذا ما لدي حاليًا في عرضي/وحدة التحكم والطرق
أستمر في الحصول على هذا الخطأ: لا يوجد مسار يتطابق "/العملاء // المستخدم" مع {: 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
رأي
<% 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
لقد قمت بحل هذا باستخدام سمات متداخلة ، من خلال تضمين نموذج المستخدم ، عند إنشاء العميل. وهو يعمل بلا عيب.
في حال احتاج أي منكم يا رفاق إلى مزيد من المعلومات ، فهناك شاشة الشاشة التي ساعدتني في التوصل إلى حل كحل:
نصائح أخرى
علامة النموذج الخاصة بك خاطئة ، أنت تنشر /users
بدون ال :client_id
.
جرب هذا:
<% form_for @user, :url => {:controller => 'users', :action => 'new', :client_id => @client.id} do |f| >
بدلاً من ذلك ، يمكنك استخدام الموارد المتداخلة:
config/routes.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| %>