ruby on rails - Snake_case থেকে রুমে CamelCase থেকে স্ট্রিং রূপান্তর



ruby-on-rails string (6)

আমি সাপ কেস থেকে উট ক্ষেত্রে একটি নাম রূপান্তর করার চেষ্টা করছি। কোন অন্তর্নির্মিত পদ্ধতি আছে?

যেমন: "app_user" থেকে "AppUser"

(আমার একটি স্ট্রিং আছে "app_user" আমি এটি মডেল AppUser রূপান্তর করতে AppUser )।


Answer #1

বিশুদ্ধ রুবি সমাধান জন্য বেঞ্চমার্ক

আমি বিশুদ্ধ রুবি কোড দিয়ে এটি করতে আমার মনে ছিল প্রতিটি সম্ভাবনার গ্রহণ, এখানে তারা:

  • capitalize এবং gsub

    "app_user".capitalize.gsub(/_(\w)/){$1.upcase}
  • বিভক্ত এবং মানচিত্র ব্যবহার করে মানচিত্র (ব্যবহারকারী 3869936 এর উত্তর ধন্যবাদ)

    "app_user".split('_').map(&:capitalize).join
  • বিভক্ত এবং মানচিত্র (ধন্যবাদ মিঃ ব্ল্যাক এর উত্তর)

    "app_user".split('_').map{|e| e.capitalize}.join

এবং এখানে এই সব জন্য Benchmark, আমরা দেখতে পারেন যে gsub এর জন্য বেশ খারাপ। আমি 126 080 শব্দ ব্যবহৃত।

                              user     system      total        real
capitalize and gsub  :      0.360000   0.000000   0.360000 (  0.357472)
split and map, with &:      0.190000   0.000000   0.190000 (  0.189493)
split and map        :      0.170000   0.000000   0.170000 (  0.171859)

Answer #2

আমি এখানে আপনার প্রশ্ন বিপরীত খুঁজছেন, উটের ক্ষেত্রে থেকে সর্প ক্ষেত্রে যেতে। তার জন্য underscore ব্যবহার করুন (decamelize না):

AppUser.name.underscore # => "app_user"

অথবা, যদি আপনি ইতিমধ্যে একটি উটের ক্ষেত্রে স্ট্রিং আছে:

"AppUser".underscore # => "app_user"

অথবা, যদি আপনি টেবিল নামটি পেতে চান, সম্ভবত আপনি কেন সাপের কেস চান:

AppUser.name.tableize # => "app_users"


Answer #3

উত্স: http://rubydoc.info/gems/extlib/0.9.15/String#camel_case-instance_method

শিক্ষার উদ্দেশ্যে:

class String
  def camel_case
    return self if self !~ /_/ && self =~ /[A-Z]+.*/
    split('_').map{|e| e.capitalize}.join
  end
end

"foo_bar".camel_case          #=> "FooBar"

এবং নিম্নকেন্দ্রের জন্য:

class String
  def camel_case_lower
    self.split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join
  end
end

"foo_bar".camel_case_lower          #=> "fooBar"

Answer #4

এখানে তালিকাভুক্ত অন্যান্য পদ্ধতির সর্বাধিক রেল নির্দিষ্ট। যদি আপনি রুবি রুবি দিয়ে এটি করতে চান তবে নিচের সংক্ষিপ্ত পদ্ধতিটি অনুসরণ করুন (প্রস্তাবিত উন্নতির জন্য @ ulysse-bn ধন্যবাদ)

x="this_should_be_camel_case"
x.gsub(/(?:_|^)(\w)/){$1.upcase}
    #=> "ThisShouldBeCamelCase"

Answer #5

যদি আপনি Rails ব্যবহার করছেন, String#camelize আপনি যা খুঁজছেন তা।

  "active_record".camelize                # => "ActiveRecord"
  "active_record".camelize(:lower)        # => "activeRecord"

যদি আপনি একটি প্রকৃত বর্গ পেতে চান, আপনি তার উপরে String#constantize ব্যবহার করা উচিত।

"app_user".camelize.constantize

Answer #6

classify ব্যবহার করুন। এটা ভাল প্রান্ত ক্ষেত্রে পরিচালনা করে।

"app_user".classify # => AppUser
"user_links".classify   # => UserLink

বিঃদ্রঃ:

এই উত্তরটি দেওয়া প্রশ্নের বিবরণ নির্দিষ্ট (এটি প্রশ্ন শিরোনাম নির্দিষ্ট নয়)। যদি কেউ উটের ক্ষেত্রে একটি স্ট্রিং রূপান্তর করার চেষ্টা করছে সেগুলি Sergio উত্তর ব্যবহার করা উচিত। প্রশ্নকর্তা বলেছেন যে তিনি app_user AppUser ( App_user নয়) রূপান্তর করতে চান, তাই এই উত্তরটি ..





string