मैं डेविस और रेल 4 का उपयोग कर एक वेब ऐप पर काम कर रहा हूं। मेरे पास उपयोगकर्ता मॉडल है जिसे मैंने 2 अतिरिक्त फॉर्म फ़ील्ड्स के साथ बढ़ाया है, जैसे कि जब कोई उपयोगकर्ता साइन अप करता है तो वह अपना पहला/उपनाम। (http://blog.12spokes.com/web-design-development/adding-custom-fields-to-your-devise-user-model-in-rails-4/ पर आधारित)। अब मैं संस्थान मॉडल जोड़ना चाहता हूं। यह मॉडल has_many: उपयोगकर्ता, और उपयोगकर्ता संबंधित है: संस्था। मैं उसी उपयोगकर्ता पर संस्था का नाम पंजीकृत करने में सक्षम होना चाहता हूं, जिसे मैं उपयोगकर्ता पंजीकृत करता हूं। मुझे पता है कि मुझे अपने संस्थान मॉडल में nested_attribute की आवश्यकता है, क्योंकि यह अभिभावक है, जिसे मैं थोड़ा सा दिखाऊंगा। जब मैं उपयोगकर्ता को साइन अप करने का प्रयास करता हूं तो मुझे कंसोल में मिलता है: अप्रत्याशित पैरामीटर: संस्थान।डेविस के साथ रेल 4.0। नेस्टेड विशेषताओं अनपेक्षित पैरामीटर
मेरा संकेत यह है कि मैं अपने बच्चे वर्ग (उपयोगकर्ता) के आधार पर अपने मूल वर्ग (संस्थान) को अपडेट नहीं कर सकता। क्या इसका समाधान हो सकता है? या किसी ने कुछ ऐसा अनुभव किया है?
class Institutions < ActiveRecord::Base
has_many :users,
accepts_nested_attributes_for :users
end
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
belongs_to :institution
end
पंजीकरण/new.html.erb यहाँ मैं नेस्टेड रूप
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
.
.
<%= f.fields_for :institutions do |i| %>
<p><%= i.label :name %><br />
<%= i.text_field :institutions_attr %></p>
<% end %>
ट्यूटोरियल मैं लिंक कर लिया है पहले, मैं एक नया उपयोगकर्ता :: ParameterSanitizer बनाया है के आधार पर है जो से विरासत :: पैरामीटर सेंनिटर और sign_up
विधि निम्नानुसार है:
lib/user_sanitizer.rb
private
def sign_up
default_params.permit(:first_name, :last_name ,:email, :password, :password_confirmation, :current_password, institutions_attributes: [:id, :name])
end
अंत में, मेरी application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
protected
def devise_parameter_sanitizer
if resource_class == User
User::ParameterSanitizer.new(User, :user, params)
else
super
end
end
end
पढ़ने के लिए धन्यवाद!
कंसोल पैरामीटर उत्पादन:
{"utf8"=>"✓",
"authenticity_token"=>"JKuN6K5l0iwFsj/25B7GKDj7WEHR4DO3oaVyGxGJKvU=",
"user"=>{"email"=>"[email protected]",
"first_name"=>"abc",
"last_name"=>"xyz",
"institutions"=>{"name"=>"Government"},
"password"=>"[FILTERED]",
"password_confirmation"=>"[FILTERED]"},
"commit"=>"Sign up"}
संपादित
के रूप में सुझाव दिया, मैं
params.require(resource_name).permit(:email, :first_name, :last_name, :password, :password_confirmation, institution: [:name])
को
params.require(resource_name).permit(:email, :first_name, :last_name, institution: [:name], :password, :password_confirmation) and I get an *error syntax error, unexpected ',', expecting => ...nstitution: [:name], :password, :password_confirmation)*
लेकिन, अगर मैं फिर से संपादित जोड़ लिया है
मुझे कोई वाक्यविन्यास त्रुटि नहीं मिलती है लेकिन मुझे अनिर्धारित पैरामीटर मिलते हैं: अनुरोध में संस्थान।
मेरा विश्वास यह है कि ऐसा इसलिए होता है क्योंकि उपयोगकर्ता संस्थान का बच्चा है। हालांकि, मैं इसके आसपास एक काम खोजने में असमर्थ रहा हूं।
उत्कृष्ट उत्तर –
धन्यवाद बहुत राजाओरी, यह वही है जो मैं ढूंढ रहा था!मुझे निराशा के कुछ अतिरिक्त घंटे बचाया। – DerProgrammer
@ राजाओरी मेना मैं devise_auth_token मणि का उपयोग कर रहा हूं और उसी मणि के लिए उपरोक्त विधियों के बाद मुझे अभी भी अप्रत्याशित पैरामीटर मिल रहा है: मेरे सर्वर लॉग में खाता त्रुटि – Anjan