/ / (रूबी ऑन रेल्स) हैश को DB में जोड़ने में मदद करें - रूबी, रूबी-ऑन-रेल्स -4, हैश, यम्ल

(रूबी ऑन रेल्स) हैश को डीबी से जोड़ने में मदद करें - रूबी, रूबी-ऑन-रेल्स -4, हैश, यमल

रूबी 2.0, रेल्स 4.1.0, sQlite3। मुझे अंदर परमेस बनाना होगा मेरे डीबी में जोड़ने के लिए हैश। मेरे पास यमल फ़ाइल और मॉडल है:

class User < ActiveRecord::Base
has_many :tweets
accepts_nested_attributes_for :tweets
end
class Tweet < ActiveRecord::Base
belongs_to :user
end

मेरे 15 उपयोगकर्ता हैं। इस कोड को चलाने का प्रयास करें

UsTw_model_params = {user: []}

count_of_users = seeds_yml["users"].length - 1

for i in 0..count_of_users do
UsTw_model_params[:user][i] = {}
UsTw_model_params[:user][i][:name] = seeds_yml["users"][i]["name"]
UsTw_model_params[:user][i][:email] = seeds_yml["users"][i]["email"]
UsTw_model_params[:user][i][:password] = seeds_yml["users"][i]["password"]
UsTw_model_params[:user][i][:avatar] = seeds_yml["users"][i]["avatar"]
UsTw_model_params[:user][i][:tweets_attributes] = []

if seeds_yml["users"][i].has_key?(:tweets)
count_of_tweets = seeds_yml["users"][i]["tweets"].length - 1
for j in 0..count_of_tweets do
UsTw_model_params[:user][i][:tweets_attributes][j] = {}
UsTw_model_params[:user][i][:tweets_attributes][j][:post] = seeds_yml["users"][i]["tweets"][j]["post"]
UsTw_model_params[:user][i][:tweets_attributes][j][:created_at] = seeds_yml["users"][i]["tweets"][j]["created_at"]
end
end
end

User.create(UsTw_model_params[:user])

और त्रुटि प्राप्त करें ActiveRecord :: UnknownAttributeError: अज्ञात विशेषता: उपयोगकर्ता

क्या बात है?

उत्तर:

उत्तर № 1 के लिए 1

रूबी में एक बड़े अक्षर के साथ शुरू होने वाले कुछ भी एक स्थिरांक के रूप में माना जाता है। चेतावनी में लगातार परिणाम देना। विशेष रूप से:

UsTw_model_params = {user: []} # is a constant!

उदाहरण:

class User
module Huggable
TAU = 2 * PI

चर रिवाज के अनुसार snakecase में हो जैसे:

user_tweet_params

दूसरा, आप छोड़ सकते हैं for पीछे छूट जाता है। रूबी के पास सरणियों और अन्य enumables जैसे कि लूप के लिए बेहतर तरीके हैं map, each, आदि।

# Loop though seeds_yml["users"] and create a new array
user_tweet_params = seeds_yml["users"].map do |user|
# with_indifferent_access allows us to use symbols or strings as keys
user = user.with_indifferent_access
user.slice!(:name, :email, :password, :avatar, :tweets)

# Does the user have tweets?
# We use try(:any?) incase user["tweets"] is nil
if user[:tweets].try(:any?)
# Take the tweets and nest then under tweet_attributes
user[:tweet_attributes] = user.tweets.map do |tweet|
tweet.with_indifferent_access.slice!(:post, :created_at)
end
end

# remove the original tweets
user.delete(:tweets)
# return user
user
end