uz
Feedback
ToCode

ToCode

Kanalga Telegramโ€™da oโ€˜tish

ื˜ื™ืคื™ื ืงืฆืจื™ื ืœืžืชื›ื ืชื™ื ืžืืช ื™ื ื•ืŸ ืคืจืง

Ko'proq ko'rsatish
1 418
Obunachilar
Ma'lumot yo'q24 soatlar
-17 kunlar
-430 kunlar
Postlar arxiv
ToCode
1 417
ื—ื“ืฉ ื‘ืืชืจ: ืงื•ืจืก Full Stack React ืื•ืคืก ื”ื ืขืฉื• ืืช ื–ื” ืฉื•ื‘. ืื‘ืœ ืื•ืœื™ ื›ื›ื” ื–ื” ื‘ืชืขืฉื™ื™ื”. ืจื™ืืงื˜ ื”ืชื—ื™ืœื” ืืช ื“ืจื›ื” ื‘ืชื•ืจ ืกืคืจื™ื” ืœื›ืชื™ื‘ืช ืงื•ืžืคื•ื ื ื˜ื•ืช ืขื•ื“ ืœืคื ื™ ืฉืงืœืืกื™ื ื”ื’ื™ืขื• ืœ JavaScript ื•ืœื›ืŸ ื‘ืชื—ื™ืœืช ื”ื“ืจืš ื”ืฉืชืžืฉื” ื‘ื›ืชื™ื‘ ืžื‘ื•ืกืก ืื•ื‘ื™ืงื˜ื™ื ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืงื•ืžืคื•ื ื ื˜ื”. ื›ื‘ืจ ืื– ื—ืฉื‘ืชื™ ืฉื”ืงื•ื ืกืคื˜ ืฉืœ ืจื™ืืงื˜ ื”ื•ื ื’ืื•ื ื™ ื•ื”ืงืœื˜ืชื™ ืขืœื™ื” ืงื•ืจืก. ื–ืžืŸ ืžื” ืื—ืจ ื›ืš ืื•ื‘ื™ืงื˜ื™ื ื ืจืื• ืœื›ืœ ื”ืขื•ืœื ืžื™ื•ืฉื ื™ื ื•ืžืคืชื—ื™ ืจื™ืืงื˜ ืฉืžื—ื• ืœืฉื“ืจื’ ืืช ื”ืคืจื™ื™ืžื•ื•ืจืง ืœืชืžื™ื›ื” ื‘ืงืœืืกื™ื. ื ื›ื•ืŸ, ื”ื ืœื ื”ืฆืœื™ื—ื• ืœื‘ื ื•ืช ืคื ื™ืžื” ืืช ื›ืœ ื”ืื•ืคืฆื™ื•ืช ืฉืœ ื›ืชื™ื‘ ื”ืื•ื‘ื™ืงื˜ื™ื ืื‘ืœ ื”ื ื—ืฉื‘ื• ืฉื–ื” ื™ืกืชื“ืจ ื‘ื”ืžืฉืš ื•ื’ืจืจื• ืื•ืชื™ ืœื”ืงืœื™ื˜ ืงื•ืจืก ื—ื“ืฉ ืขืœ ื›ืชื™ื‘ ื”ืžื—ืœืงื•ืช. ืขื‘ืจื• ืขื•ื“ ื›ืžื” ืฉื ื™ื ื•ื”ื—ื‘ืจื™ื ื‘ืจื™ืืงื˜ ื”ื‘ื™ื ื• ืฉืืช ืžื” ืฉืื‘ื“ ื‘ืื•ื‘ื™ืงื˜ื™ื ืื™ ืืคืฉืจ ืœื”ื—ื–ื™ืจ ื‘ืžื—ืœืงื•ืช ื•ืœื›ืŸ ืขื‘ืจื• ืœื›ืชื™ื‘ ื—ื“ืฉ ื‘ื• ืงื•ืžืคื•ื ื ื˜ื” ื”ื™ื ื‘ืขืฆื ืคื•ื ืงืฆื™ื” (ื›ืชื™ื‘ ื” Hooks). ื›ืชื™ื‘ ื–ื” ืืคืฉืจ ืœื”ื ืœืชืžื•ืš ื‘ื›ืœ ื”ืชื‘ื ื™ื•ืช ื”ื™ืฉื ื•ืช ืœืฉื™ืžื•ืฉ ื—ื•ื–ืจ ื‘ืงื•ื“ ื•ืืคื™ืœื• ื™ื•ืชืจ ืžื–ื” ื•ืœืขื‘ื“ื›ื ื”ื ืืžืŸ ืœื ื ื•ืชืจื” ื‘ืจื™ืจื” ื•ื›ืš ื ื•ืœื“ื” ื’ื™ืจืกื” ื—ื“ืฉื” ื ื•ืกืคืช ืœืงื•ืจืก ืจื™ืืงื˜. ื•ื”ื ื” ืฉื ื™ื ื—ื•ืœืคื•ืช ื•ืจื•ื— ื—ื“ืฉื” ืฉื•ื‘ ื ืฉื‘ื” ื‘ืืงื•ืกื™ืกื˜ื ื•ื”ืคืขื ื”ื™ื ื ืงืจืืช Server Components: ื”ื™ื›ื•ืœืช ืœื›ืชื•ื‘ ืืคืœื™ืงืฆื™ื•ืช Full Stack ืžืœืื•ืช ื‘ืจื™ืืงื˜ ื›ืืฉืจ ืงื•ืžืคื•ื ื ื˜ื•ืช ืžืกื•ื™ืžื•ืช ืžืจื™ืฆื•ืช ืงื•ื“ ื‘ืฆื“ ืฉืจืช ื•ืงื•ืžืคื•ื ื ื˜ื•ืช ืื—ืจื•ืช ืžืจื™ืฆื•ืช ืงื•ื“ ื‘ื“ืคื“ืคืŸ, ื•ืœืคืขืžื™ื ืงื•ืžืคื•ื ื ื˜ื•ืช ืžืกื•ื™ืžื•ืช ื™ืจื•ืฆื• ื’ื ื‘ืฆื“ ืฉืจืช ื•ื’ื ื‘ื“ืคื“ืคืŸ. ืคื™ืฆื•ืœ ื–ื” ืฉืœ ืกื‘ื™ื‘ืช ื”ืจื™ืฆื” ืฉืœ ื”ืงื•ืžืคื•ื ื ื˜ื•ืช ืคื•ืชื— ื”ืžื•ืŸ ื“ืœืชื•ืช ื—ื“ืฉื•ืช ืขื‘ื•ืจ ืกืคืจื™ื” ื›ืžื• ืจื™ืืงื˜ ื•ื”ื•ืคืš ืื•ืชื”, ื‘ืขื–ืจืช ื”ืืงื•ืกื™ืกื˜ื ืฉืกื‘ื™ื‘ื” ื•ื‘ืžื™ื•ื—ื“ Next.JS ืœืžื ื•ืข ื”ืžืจื›ื–ื™ ื‘ืคื™ืชื•ื— ื™ื™ืฉื•ืžื™ Full Stack ื”ื™ื•ื. ื‘ืชื–ืžื•ืŸ ืžื•ืฉืœื ื›ืœ ืกื•ื›ื ื™ ื” AI ื”ืชืื”ื‘ื• ื‘ืจื™ืืงื˜ ื•ื”ืกื˜ืืง ื”ื“ื™ืคื•ืœื˜ื™ ืฉืœ AI ืžื•ืจื›ื‘ ื”ื™ื•ื ืž React, Next, Shadcn, Tailwind ื• TypeScript. ื•ื›ืš ืœื ื ื•ืชืจื” ื‘ืจื™ืจื” ื•ื’ื ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื”ืชืงื“ื ืขื ืจื•ื— ื”ื–ืžืŸ. ืื ื™ ืฉืžื— ืœื”ืฉื™ืง ืืช ืงื•ืจืก React ื”ื—ื“ืฉ ืฉืงื™ื‘ืœ ืืช ื”ืฉื: Full Stack React ื”ืงื•ืจืก ืื™ื ื• ื”ืจื—ื‘ื” ืฉืœ ื”ืงื•ืจืก ื”ืงื™ื™ื ืืœื ืคื™ืชื•ื— ืžืืคืก ืฉืœ ื›ืœ ื”ื‘ื ื™ื™ืŸ ืฉื ืงืจื ืจื™ืืงื˜ ื‘ืฆื•ืจื” ื ื›ื•ื ื” ื•ืžื•ื›ื•ื•ื ืช ืืคืœื™ืงืฆื™ื•ืช Full Stack. ื‘ืงื•ืจืก ืชืœืžื“ื•: 1. ืื™ืš ืœื›ืชื•ื‘ ืืคืœื™ืงืฆื™ื™ืช Full Stack ืขื React, Next, Tailwind, Shadcn ื‘ TypeScript. 2. ืื™ืš ืœืืจื’ืŸ ืืช ื”ืงื•ื“ ื‘ืฆื•ืจื” ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ ื›ื“ื™ ืฉืœื ื™ืื›ื–ื‘ ืืชื›ื ื’ื ื›ืฉื”ืืคืœื™ืงืฆื™ื” ืชื’ื“ืœ. 3. ืขืฉืจื•ืช ืชื‘ื ื™ื•ืช ืœืฉื™ืžื•ืฉ ื—ื•ื–ืจ ื‘ืงื•ื“ ื•ืฉื™ืœื•ื‘ ืงื•ื“ ื—ื™ืฆื•ื ื™ ืขื ื”ืžืขืจื›ืช ืฉืœื›ื. 4. ืื™ืš ืจื™ืืงื˜ ื• Next ืขื•ื‘ื“ื™ื ืžืชื—ืช ืœืžื›ืกื” ื”ืžื ื•ืข ื›ื“ื™ ืฉืชื•ื›ืœื• ืœื™ืฆื•ืจ ื‘ืขื™ื•ืช ื•ื’ื ืœืคืชื•ืจ ืื•ืชืŸ. 5. ืื™ืš ืœื–ื”ื•ืช ื•ืœืคืชื•ืจ ื‘ืขื™ื•ืช ื‘ื™ืฆื•ืขื™ื ื‘ืืคืœื™ืงืฆื™ื•ืช React ื• Next. ืื ื™ ื›ื•ืชื‘ ื›ืืŸ Next ืื‘ืœ ืœืžืขืฉื” ื‘ืกืš ื”ื›ืœ ื”ืฉืชืžืฉืชื™ ื‘ Next ื›ื“ื™ ืœืœืžื“ ืืช ื”ืงื•ื ืกืคื˜ ืฉืœ ืงื•ืžืคื•ื ื ื˜ื•ืช ืฆื“-ืฉืจืช ื•ืงื•ืžืคื•ื ื ื˜ื•ืช ืฆื“-ืœืงื•ื—. ืœืคื ื™ ื›ืžื” ื™ืžื™ื ืคืจืกืžืชื™ ื›ืืŸ ืฉื™ื›ื•ืœืช ื–ื• ืฉื•ืœื‘ื” ื›ื‘ืจ ื’ื ื‘ React Router ื•ืื™ืŸ ืกืคืง ืฉื–ื• ืชื”ื™ื” ื”ื“ืจืš ื”ืžืจื›ื–ื™ืช ืœื‘ื ื•ืช ื™ื™ืฉื•ืžื™ Full Stack ื‘ืจื™ืืงื˜ ื‘ืฉื ื™ื ื”ืงืจื•ื‘ื•ืช. ืฆืจื™ืš ืœื”ื’ื™ื“, ืื ืืชื ื‘ื•ื ื™ื ืืคืœื™ืงืฆื™ื™ืช Client Side ื‘ืœื‘ื“ ื‘ืจื™ืืงื˜ ื”ื›ืœ ื‘ืกื“ืจ ื•ื”ืงื•ืจืก ืขื“ื™ื™ืŸ ืžืื•ื“ ื™ืขื–ื•ืจ ืœื›ื ืžืื—ืจ ื•ืื ื™ ืžืœืžื“ ืฉื ืืช ืจื™ืืงื˜ ืขืฆืžื” ืžืงืฆื” ืœืงืฆื” ื•ื’ื ืื™ืš ืœื”ืฉืชืžืฉ ื‘ Next ื›ื“ื™ ืœื›ืชื•ื‘ ืืคืœื™ืงืฆื™ื™ืช Client Side ื‘ืœื‘ื“. ืื ืืชื ืžื ื•ื™ื™ื ืœืืชืจ ืืชื ื™ื›ื•ืœื™ื ื›ื‘ืจ ืœื”ืชื—ื™ืœ ืืช ื”ืงื•ืจืก. ืื ืืชื ืœื ืžื ื•ื™ื™ื ืื– ื–ื• ื›ืžื•ื‘ืŸ ื”ื–ื“ืžื ื•ืช ืžืฆื•ื™ื ืช ืœื”ืฆื˜ืจืฃ, ื•ืื ืืชื ื‘ืืžืฆืข ื”ืงื•ืจืก ื”ื™ืฉืŸ ืื– ืืœ ื“ืื’ื” ื”ื•ื ืขื“ื™ื™ืŸ ื–ืžื™ืŸ ื•ืชื•ื›ืœื• ืœืžืฆื•ื ืื•ืชื• ืœืชืงื•ืคืช ื”ืžืขื‘ืจ ื”ืงืจื•ื‘ื” ื‘ืจืฉื™ืžืช ื”ืงื•ืจืกื™ื ื‘ืฉื React Old.

ToCode
1 417
llm.read_timeout = 600

ToCode
1 417
ืื™ืš ืœื”ื’ื“ื™ืœ ืืช ื” timeout ืขื langchainrb ืกืคืจื™ื™ืช langchainrb ื”ื™ื ื”ืกื‘ื” ืฉืœ langchain ืœ Ruby, ืจืง ืงืฆืช ืคื—ื•ืช ื˜ื•ื‘ื” ืžื”ืžืงื•ืจ. ืื—ืช ื”ื‘ืขื™ื•ืช ืฉืœ ื’ื™ืจืกืช ื” Ruby ื”ื™ื timeout ืงืฆืจ ืžื“ื™, ืžื” ืฉื’ื•ืจื ืœืฉืื™ืœืชื•ืช ืœื”ื™ื›ืฉืœ ื›ืฉืžื ืกื™ื ืœื“ื‘ืจ ืขื ื’'ืžื ื™ ืคืจื•. ื”ืžืžืฉืง ืขืฆืžื• ืฉืœ langchainrb ืžืžืฉ ื ื•ื— ื•ื‘ืžื™ื•ื—ื“ ืื”ื‘ืชื™ ืืช ื”ื™ื›ื•ืœืช ืœืงื‘ืœ ืชื•ืฆืื” ื‘ืชื•ืจ ืื•ื‘ื™ืงื˜ ื›ืฉืžืขื‘ื™ืจื™ื JSON Schema, ื›ืœื•ืžืจ ืงื•ื“ ื›ื–ื”:
json_schema = {
  type: "object",
  properties: {
    name: {
      type: "string",
      description: "Persons name"
    },
    age: {
      type: "number",
      description: "Persons age"
    },
    interests: {
      type: "array",
      items: {
        type: "object",
        properties: {
          interest: {
            type: "string",
            description: "A topic of interest"
          },
          levelOfInterest: {
            type: "number",
            description: "A value between 0 and 100 of how interested the person is in this interest"
          }
        },
        required: ["interest", "levelOfInterest"],
        additionalProperties: false
      },
      minItems: 1,
      maxItems: 3,
      description: "A list of the person's interests"
    }
  },
  required: ["name", "age", "interests"],
  additionalProperties: false
}
parser = Langchain::OutputParsers::StructuredOutputParser.from_json_schema(json_schema)
prompt = Langchain::Prompt::PromptTemplate.new(template: "Generate details of a fictional character.\n{format_instructions}\nCharacter description: {description}", input_variables: ["description", "format_instructions"])
prompt_text = prompt.format(description: "Korean chemistry student", format_instructions: parser.get_format_instructions)

llm = Langchain::LLM::OpenAI.new(api_key: ENV["OPENAI_API_KEY"])
llm_response = llm.chat(messages: [{role: "user", content: prompt_text}]).completion
parser.parse(llm_response)
ื”ื‘ืขื™ื” ื”ื™ื—ื™ื“ื” ื”ื™ื ื” timeouts ื”ืงืฆืจื™ื ืžื“ื™ ื•ื‘ืžื™ื•ื—ื“ ื‘ืขื‘ื•ื“ื” ืขื Gemini. ื”ื‘ืขื™ื” ื”ื™ื ื”ืงื•ื“ ื”ื–ื” ืžืงื•ื“ ื”ืกืคืจื™ื”:
    def http_post(url, params)
      http = Net::HTTP.new(url.hostname, url.port)
      http.use_ssl = url.scheme == "https"
      http.set_debug_output(Langchain.logger) if Langchain.logger.debug?

      request = Net::HTTP::Post.new(url)
      request.content_type = "application/json"
      request.body = params.to_json

      response = http.request(request)

      JSON.parse(response.body)
    end
ืฉืื—ืจืื™ ืœืชืงืฉื•ืจืช ืขื ื’'ืžื™ื ื™ ื•ืœื ื›ื•ืœืœ ืืคืฉืจื•ืช ืœื”ื’ื“ืจืช timeout. ืื– ื›ืŸ ืงื•ื“ื ื›ืœ ืคืชื—ืชื™ Issue ืื‘ืœ ืื– ื ื–ื›ืจืชื™ ืฉืื ื—ื ื• ื‘ืจื•ื‘ื™ ื•ื”ื•ืกืคืชื™ ืืช ื”ืงื•ื‘ืฅ config/initializers/langchain_patch.rb ืขื ื”ืชื•ื›ืŸ ื”ื‘ื:
require 'langchain/llm/google_gemini'

* This module adds a dedicated \read_timeout\ attribute to the class. *
module GoogleGeminiTimeoutAttribute
  # This one line creates two methods for us:
  # 1. \read_timeout\ (the getter, to read the value)
  # 2. \read_timeout=\ (the setter, to assign the value)
  # It manages the underlying instance variable \@read_timeout\.
  attr_accessor :read_timeout

  # We still patch http_post to use the value from our new attribute.
  def http_post(url, params)
    http = Net::HTTP.new(url.hostname, url.port)
    http.use_ssl = url.scheme == "https"
    http.set_debug_output(Langchain.logger) if Langchain.logger.debug?
    http.read_timeout = @read_timeout if @read_timeout

    request = Net::HTTP::Post.new(url)
    request.content_type = "application/json"
    request.body = params.to_json

    response = http.request(request)

    JSON.parse(response.body)
  end
end

Langchain::LLM::GoogleGemini.prepend(GoogleGeminiTimeoutAttribute)
ืฉื•ืจืช ื”ืžืคืชื— ื”ื™ื:
http.read_timeout = @read_timeout if @read_timeout
ื•ื‘ืจื•ืจ ืฉื”ื™ื” ื ื—ืžื“ ืื ืœื ื”ื™ื™ืชื™ ืฆืจื™ืš ืœืฉื›ืคืœ ืืช ื›ืœ ื”ืžื™ืžื•ืฉ ืฉืœ http_post ืื‘ืœ ืื™ ืืคืฉืจ ืœืงื‘ืœ ื”ื›ืœ ื‘ื—ื™ื™ื. ื•ืขื›ืฉื™ื• ืืคืฉืจ ืœื”ื’ื“ื™ืจ ืืช ื” timeout ื‘ืฆื•ืจื” ืคืฉื•ื˜ื” ืขืœ ื™ื“ื™ ื›ืชื™ื‘ืช ื”ืขืจืš ืœืื•ื‘ื™ืงื˜:
llm = Langchain::LLM::GoogleGemini.new(
  api_key: Rails.application.credentials.google_api_key,
  default_options: { chat_model: 'gemini-2.5-pro-preview-05-06' },
)

ToCode
1 417
ืงื•ืžืคื•ื ื ื˜ื•ืช ืฆื“ ืฉืจืช ื”ื’ื™ืขื• ืœ React Router ืžืจื’ืข ืฉ Vercel ืœืงื—ื” ืืช ื”ื”ื•ื‘ืœื” ื‘ืคื™ืชื•ื— ืฉืœ ืจื™ืืงื˜ ื”ื™ื” ื‘ืจื•ืจ ืื™ืš ื”ื•ื•ื™ื›ื•ื— ื”ื–ื” ื™ืกืชื™ื™ื ื•ืฉ React Router ืชืืœืฅ ืœื”ื“ื‘ื™ืง ืืช ื”ืคืขืจ. ืงืฉื” ืžืื•ื“ ื‘ืคื™ืชื•ื— ืœืœื›ืช ื ื’ื“ ื”ื–ืจื ื•ื‘ืžืงืจื” ืฉืœื ื• ื ื’ื“ ื”ื›ื™ื•ื•ืŸ ืฉืœ ื”ืกืคืจื™ื” ืฉืขื‘ื•ืจื” ืืชื” ื‘ื•ื ื”. ื”ื’ื™ืฉื” ืฉืœ ืจื™ืืŸ ืคืœื•ืจื ืก ืœืื•ืจืš ื”ื“ืจืš ื”ื™ืชื” ืฉ Server Components ืœื ืžืกืคื™ืง ื™ืฆื™ื‘ื™ื ื•ืžืžื™ืœื ืขื ืจืžื™ืงืก (ืื• ืจื™ืืงื˜ ืจืื•ื˜ืจ 7) ืื™ืŸ ื‘ื”ื ืฆื•ืจืš. ื‘ื›ืœ ืžืงืจื” ืื ื™ ืฉืžื— ืœืจืื•ืช ืฉื–ื” ื”ืฉืชื ื” ื•ืฉื”ืืงื•ืกื™ืกื˜ื ืžืชื™ื™ืฉืจ. ื–ื” ืจืง ืžื“ื’ื™ืฉ ืืช ื”ื—ืฉื™ื‘ื•ืช ืฉืœ ื”ื‘ื ืช ืฉื™ื˜ืช ื”ืขื‘ื•ื“ื” ื” Full Stack-ื™ืช ืฉืœ ืจื™ืืงื˜ ื”ื™ื•ื: ืงื•ืžืคื•ื ื ื˜ื•ืช ืฆื“ ืฉืจืช ืฉื•ืœืคื•ืช ืžื™ื“ืข ื•ืงื•ืžืคื•ื ื ื˜ื•ืช ืฆื“ ืœืงื•ื— ืื—ืจืื™ื•ืช ืขืœ ื”ืื™ื ื˜ืจืงื˜ื™ื‘ื™ื•ืช. ืœืกืงืจื ื™ื ื–ื” ืจื™ืคื• ื“ื•ื’ืžื” ืฉื”ื—ื‘ืจื™ื ื‘ืจื™ืืงื˜ ืจืื•ื˜ืจ ืคืจืกืžื•: https://github.com/ryanflorence/rsc-movies ื‘ืชื™ืงื™ื™ืช routes/home ืื ื™ ืžื•ืฆื ืืช ื” Server Component ืฉืœ ื“ืฃ ื”ื‘ื™ืช:
import { MovieGrid } from "../components/movie-grid.tsx";
import { MovieTile } from "../components/movie-tile.tsx";

export const shouldRevalidate = () => false;

export async function ServerComponent() {
  let featuredMovieIds = [32932, 23643, 29915, 30895, 31472, 33411];

  return (
    <>
      <title>RR RSC Movies</title>
      <MovieGrid>
        {featuredMovieIds.map((id: number) => (
          <MovieTile key={id} id={id} />
        ))}
      </MovieGrid>
    </>
  );
}
ื•ื‘ components/add-to-favorites ื“ื•ื’ืžื” ืœืงื•ืžืคื•ื ื ื˜ืช ืฆื“ ืœืงื•ื—:
"use client";
import { useFormStatus } from "react-dom";

export function AddToFavoritesButton({ isLiked }: { isLiked: boolean }) {
  let { pending } = useFormStatus();

  return (
    <button
      type="submit"
      onClick={event => {
        if (pending) event.preventDefault();
      }}
      className="font-instrumentSans font-semibold rounded-xl w-full text-xl border-[2px] py-2 px-5 group"
    >
      <span className="group-hover:scale-105 group-active:scale-100 inline-block transition-transform duration-100">
        {pending
          ? isLiked
            ? "Removing..."
            : "Adding..."
          : isLiked
            ? "Remove from favorites"
            : "Add to favorites"}
      </span>
    </button>
  );
}
ื .ื‘. ื‘ื™ืžื™ื ืืœื” ืื ื™ ืžืกื™ื™ื ืขื‘ื•ื“ื” ืขืœ ืงื•ืจืก ืจื™ืืงื˜ ื—ื“ืฉ ืœืืชืจ ืฉืžืชื‘ืกืก ืขืœ ืชื‘ื ื™ืช ื” Client/Server ื•ื™ื›ื™ืœ ืืช ื”ืกื˜ืืง ื”ื“ื™ืคื•ืœื˜ื™ ืฉืœ React / Next / TypeScript / Shadcn / Tailwind. ืื ื™ ืžื•ื“ื” ืฉื”ื™ื™ืชื™ ืžื•ื“ืื’ ืžื”ื”ืชืขืงืฉื•ืช ืฉืœ ืจื™ืืงื˜ ืจืื•ื˜ืจ ืขืœ ืชื‘ื ื™ืช ื” loaders ืฉืœื”ื ื•ืžืื•ื“ ืฉืžื— ืฉื‘ืกื•ืฃ ื”ื ื”ืฆืœื™ื—ื• ืœื”ืชืงื“ื ื•ืœืฉืœื‘ ืืช ื” loaders ืขืœ ื’ื‘ื™ ื”ืชืฉืชื™ืช ื”ืจื™ืืงื˜ื™ืช. ืขื“ื›ื•ืŸ ืžืกื•ื“ืจ ืขืœ ื”ืงื•ืจืก ื™ืขืœื” ื›ืฉื™ื”ื™ื” ืžื•ื›ืŸ ื›ื ืจืื” ืื—ืจื™ ื”ื—ื’.

ToCode
1 417
ื˜ื™ืค ื ืงืกื˜ - ืžื’ื“ื™ืจื™ื displayName ืœืคื ื™ ื” memo ืืช ื”ื“ื•ื’ืžื” ื”ื–ืืช ืื ื™ ืžื•ื“ื” ืฉืื ื™ ืœื ืœื’ืžืจื™ ืžื‘ื™ืŸ ืื‘ืœ ืžืคืจืกื ืœืคื™ ืชืฆืคื™ืช. ื‘ืงื•ื“ ืจื™ืืงื˜ ืฆื“-ืœืงื•ื— ืจื’ื™ืœ ื‘ vite ื”ื™ื™ืชื™ ืจื’ื™ืœ ืœื›ืชื•ื‘:
import { memo } from 'react';

const NewMessage = memo(() => {
  return <p>demo</p>;
})

NewMessage.displayName = "foo";

export default NewMessage;
ื•ื”ืงื•ืžืคื•ื ื ื˜ื” ื‘ื›ืœื™ ื”ืคื™ืชื•ื— ื”ื•ืคื™ืขื” ืขื ื”ืฉื foo. ื•ื›ืŸ ื‘ืจื•ื‘ ื”ืžืงืจื™ื ื›ื“ืื™ ืœื‘ื—ื•ืจ ืฉื ืืช ืฉื ื”ืงื•ืžืคื•ื ื ื˜ื” ื”ืžืงื•ืจื™ ื›ื“ื™ ืฉื”ื™ื ืชื™ืงืจื ื‘ืฉื ื”ืืžื™ืชื™ ืฉืœื” ื•ืœื ื‘ืื™ื–ื” _c ืขื ืชื•ืกืคืช Memo. ื›ืฉื”ืขื‘ืจืชื™ ืืช ืื•ืชื• ืงื•ื“ ืœ next ื–ื” ืœื ืขื‘ื“ ื•ืฉื ื”ืงื•ืžืคื•ื ื ื˜ื” ืฉื”ื•ืคื™ืข ื‘ื›ืœื™ ื”ืคื™ืชื•ื— ื”ื™ื” _c. ื”ืคื™ืชืจื•ืŸ ื”ื™ื” ืœื”ื’ื“ื™ืจ ืืช ื” displayName ืขืœ ื”ืงื•ืžืคื•ื ื ื˜ื” ืœืคื ื™ ืฉืžืคืขื™ืœื™ื memo ื‘ืื•ืคืŸ ื”ื‘ื:
'use client';

import { memo } from 'react';

const NewMessage = () => {
  return <p>demo</p>;
}
NewMessage.displayName = 'foo';

export default memo(NewMessage);
ื” AI ื”ืืฉื™ื ืืช ืžื ื’ื ื•ืŸ ื” build ืฉืœ next, ืื‘ืœ ืื ื™ ืœื ื‘ื˜ื•ื— ืฉื”ื•ื ืฆื•ื“ืง. ืื ื™ืฉ ืœื›ื ืจืขื™ื•ื ื•ืช ืืœ ืชืชื‘ื™ื™ืฉื• ืœืฉืชืฃ ื‘ืชื’ื•ื‘ื•ืช.

ToCode
1 417
ืื– ื›ื‘ืจ ืœื ืฆืจื™ืš State Management Library ื‘ืจื™ืืงื˜? ื‘ื™ืงืฉืชื™ ืž lovable ืœืฉื›ืคืœ ืืช ื˜ื˜ืจื™ืก. ื”ื•ื ื”ื›ื ื™ืก ืืช ืจื™ืืงื˜ ืจืื•ื˜ืจ, ืืช ืจื™ืืงื˜ ืงื•ื•ืจื™, ืืช ื˜ื™ื™ืœื•ื•ื™ื ื“ ื›ืžื•ื‘ืŸ ื•ื’ื ืืช Shadnc. ื”ื•ื ื’ื ื—ื™ืœืง ืืช ื”ืžืฉื—ืง ืœืงื•ืžืคื•ื ื ื˜ื•ืช ื‘ืฆื•ืจื” ืžืกื•ื“ืจืช ื•ื”ืคืจื™ื“ ืืช ื”ืœื•ื’ื™ืงื” ืœืงื•ื‘ืฅ hook ื ืคืจื“. ืื ื™ ืœื ื‘ื™ืงืฉืชื™ ืฉื•ื ื“ื‘ืจ ืžื–ื”. ืขืœ ืกืคืจื™ื™ืช ื ื™ื”ื•ืœ ืกื˜ื™ื™ื˜ ื”ื•ื ื•ื•ื™ืชืจ. ื’ื v0 ืœื ื—ืฉื‘ ืฉื–ื” ื—ืฉื•ื‘, ื•ื’ื base44 ื•ื•ื™ืชืจ ืขืœ ื–ื”. ืื– ื ื›ื•ืŸ ืื ื™ ืœื ื‘ื˜ื•ื— ืฉืฆืจื™ืš ืœืœืžื•ื“ ืž AI ื‘ืื™ื–ื” ืกืคืจื™ื•ืช ืœื”ืฉืชืžืฉ ืื‘ืœ ื™ืฉ ืœื”ื ื ืงื•ื“ื”. ืืœื” ื”ืชื‘ื ื™ื•ืช ืฉืื ื—ื ื• ืจื•ืื™ื ื”ื™ื•ื: 1. ืกื˜ื™ื™ื˜ ื’ืœื•ื‘ืืœื™ ืžื ื•ื”ืœ ื“ืจืš ืงื•ื ื˜ืงืกื˜ (ืœื“ื•ื’ืžื” React Query) ื‘ืฆื•ืจื” ืฉืงื•ืคื”. ืืคืฉืจ ืœื”ื’ื™ื“ ืฉื‘ืžืงื•ื ืœื—ืœืง ืืช ื”ืืคืœื™ืงืฆื™ื” ืœ slices ื‘ืกื’ื ื•ืŸ ืจื™ื“ืืงืก ืื ื—ื ื• ืžื—ืœืงื™ื ืื•ืชื• ืœ"ืชื—ื•ืžื™ ืื—ืจื™ื•ืช ื’ืœื•ื‘ืืœื™ื™ื" ื›ืฉื›ืœ ืชื—ื•ื ืื—ืจื™ื•ืช ืžื ื•ื”ืœ ืขืœ ื™ื“ื™ ืกืคืจื™ื” ื ืคืจื“ืช. 2. ืžื‘ื ื” ืฉื˜ื•ื— ืฉืœ ืงื•ืžืคื•ื ื ื˜ื” ืจืืฉื™ืช ืฉืžื ื”ืœืช ืกื˜ื™ื™ื˜ ื•ืžืขื‘ื™ืจื” ืื•ืชื• ื‘ืชื•ืจ prop ืœื™ืœื“ื™ื, ื‘ืžืงื•ื ืขืฅ ืขืžื•ืง ืฉืœ ืงื•ืžืคื•ื ื ื˜ื•ืช. 3. ื”ืกืชืžื›ื•ืช ื’ื“ื•ืœื” ื™ื•ืชืจ ืขืœ ืงื•ื“ ืฆื“ ืฉืจืช ื•ืขื“ื›ื•ืŸ ื”ืกื˜ื™ื™ื˜ ื™ืฉื™ืจื•ืช ืœืงื•ืžืคื•ื ื ื˜ื•ืช ื‘ืืžืฆืขื•ืช Web Sockets ืื• SSE. 4. ื”ืชื‘ื ื™ืช ื”ืงืœืืกื™ืช ืฉืœ ื ืงืกื˜ - ืงืจื™ืืช ืžื™ื“ืข ืž DB ืžืงื•ืžืคื•ื ื ื˜ืช ืฆื“ ืฉืจืช ื•ื”ืขื‘ืจื” ื‘ืชื•ืจ prop ืœืงื•ืžืคื•ื ื ื˜ืช ืฆื“ ืœืงื•ื—, ืฉืžื™ืจื” ื—ื–ืจื” ืœืฉืจืช ืขื Server Action ื•ืขื“ื›ื•ืŸ ืกื˜ื™ื™ื˜ ืžืงื•ืžื™ ื‘ืงื•ืžืคื•ื ื ื˜ื•ืช. ื•ืžื” ืืชื›ื? ืขื“ื™ื™ืŸ ืžืฉืชืžืฉื™ื ื‘ืจื™ื“ืืงืก ืื• ืกืคืจื™ื•ืช ื“ื•ืžื•ืช? ืื ื›ืŸ ืืฉืžื— ืœืฉืžื•ืข ื‘ืชื’ื•ื‘ื•ืช ืœืื™ื–ื” ืฆืจื›ื™ื ื•ืื ื ื™ืกื™ืชื ืคืชืจื•ื ื•ืช ืื—ืจื™ื?

ToCode
1 417
ืกื™ื›ื•ื ื•ื•ื‘ื™ื ืจ GenAI ื•ืชื•ื›ื ื™ื•ืช ืœื”ืžืฉืš ืืชืžื•ืœ ื”ืขื‘ืจืชื™ ื›ืืŸ ื•ื•ื‘ื™ื ืจ ืจืืฉื•ืŸ ืื—ืจื™ ืชืงื•ืคื” ืืจื•ื›ื” ืฉืœ ื”ืคืกืงื” ื‘ืžืกื’ืจืช ืงื‘ื•ืฆืช ืœื™ืžื•ื“ GenAI. ืงืฆืช ื”ื•ืคืชืขืชื™ ืžื›ืžื•ืช ื”ืื ืฉื™ื ื•ื‘ืžื™ื•ื—ื“ ืžื›ืžื•ืช ื”ืื ืฉื™ื ืฉื›ื‘ืจ ืžืฉืชืžืฉื™ื ื‘ื›ืœื™ AI ืœืคื™ืชื•ื—. ื“ื™ื‘ืจื ื• ืขืœ ืื™ืš ืœืฉืœื‘ AI ื‘ืชื”ืœื™ืš ื›ืชื™ื‘ืช ื”ืงื•ื“ ื•ืจืื™ื ื• ืžืกืคืจ ืืกื˜ืจื˜ื’ื™ื•ืช- 1. ื”ืจืื™ืชื™ ืฉื”ืงื•ื“ ื‘ืคืจื•ื™ืงื˜ ืฉืœื ื• ื”ื•ื ื—ืœืง ืžื”ืคืจื•ืžืคื˜, ื•ืœื›ืŸ ื“ืจืš ืื—ืช ืœืงื‘ืœ ืชื•ืฆืื•ืช ื˜ื•ื‘ื•ืช ื™ื•ืชืจ ืžื” AI ื”ื™ื ืœืฉืคืจ ืืช ืื™ื›ื•ืช ื”ืงื•ื“ ืื• ืœื‘ื ื•ืช ืžืกื’ืจืช ื›ืœืœื™ืช ืœืคื™ืชื•ื— ืคื™ืฆ'ืจื™ื. 2. ื—ืœืง ืžื”ืžืฉืชืชืคื™ื ื”ื–ื›ื™ืจื• ืฉื’ื ืžืกืžื›ื™ื ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ืคืจื•ืžืคื˜, ื•ืฉื”ื ืžืฆืœื™ื—ื™ื ืœื”ื’ื™ืข ืœืชื•ืฆืื•ืช ื˜ื•ื‘ื•ืช ื‘ืขื–ืจืช ื›ืชื™ื‘ืช ืื™ืคื™ื•ืŸ ืžืกื•ื“ืจ ืœืคืจื•ื™ืงื˜ ื•ืœืคื™ืฆ'ืจ, ื”ื™ืขื–ืจื•ืช ื‘ AI ื›ื“ื™ ืœืฉืคืจ ืืช ื”ืื™ืคื™ื•ืŸ ื•ื‘ืกื•ืฃ ื›ืฉืื•ืชื• ืื™ืคื™ื•ืŸ ืžื’ื™ืข ืœืจืžืช ืคื™ืจื•ื˜ ื•ื“ื™ื•ืง ืžืกืคื™ืง ื˜ื•ื‘ื” ืื– ื ื•ืชื ื™ื ืœ AI ืœืžืžืฉ. 3. ื”ืจืื™ืชื™ ืืช Ask Mode ืฉืœ ื›ืœื™ ื”ืคื™ืชื•ื— ื•ื”ืžืœืฆืชื™ ืœื”ืฉืชืžืฉ ื‘ื• ื›ื“ื™ ืœืœืžื•ื“ ื™ื•ืชืจ ืขืœ ื”ืคืจื•ื™ืงื˜ ืžืชื•ืš ื” Cursor ืื• ื” VS Code. ื”ืœื™ืžื•ื“ ื”ื–ื” ืžืฉืจืช ืฉืชื™ ืžื˜ืจื•ืช, ื’ื ื ื•ืชืŸ ืœื ื• ื ืงื•ื“ืช ืžื‘ื˜ ื ื•ืกืคืช ืขืœ ื”ืคืจื•ื™ืงื˜ ื•ื’ื ื•ืœื ืคื—ื•ืช ื—ืฉื•ื‘ ืขื•ื–ืจ ืœื ื• ืœื”ื‘ื™ืŸ ืื™ืš ื” AI ืงื•ืจื ืืช ื”ืคืจื•ื™ืงื˜ ืฉืœื ื•. ื”ืจื‘ื” ืคืขืžื™ื ืฉื•ื•ื” ืœืกื›ื ืฉื™ื—ื•ืช ื›ืืœื” ื‘ Ask Mode ืœืงื•ื‘ืฅ Markdown (ื›ืœื•ืžืจ ืœื‘ืงืฉ ืžื” AI ืœืกื›ื ื‘ืฉื‘ื™ืœื ื•) ื•ืื– ืืคืฉืจ ืœืฆืจืฃ ืืช ื”ืงื•ื‘ืฅ ื”ื–ื” ืœื‘ืงืฉื•ืช ืขืชื™ื“ื™ื•ืช. ื”ื™ืชื” ื’ื ื”ืกื›ืžื” ืฉื”ืžืงืฆื•ืข ืฉืœื ื• ืขื•ื‘ืจ ืžื”ืคื›ื” ื•ืฉืื ื—ื ื• ืœื ื‘ื˜ื•ื—ื™ื ืื™ืš ื™ืจืื” ืชื”ืœื™ืš ื›ืชื™ื‘ืช ืงื•ื“ ื‘ืขืชื™ื“. ืขื›ืฉื™ื• ืœื’ื‘ื™ ื”ื”ืžืฉืš: 1. ื”ื™ืชื” ื”ืขื ื•ืช ื˜ื•ื‘ื” ื•ื”ื™ื” ื ืจืื” ืฉืืชื ืจื•ืฆื™ื ืœืจืื•ืช ืขื•ื“ ื“ื•ื’ืžืื•ืช ืœื›ืŸ ื‘ื™ื ืชื™ื™ื ืื ื™ ืžืžืฉื™ืš ืืช ื”ื•ื•ื‘ื™ื ืจ ื‘ืชื•ืจ ืคื’ื™ืฉื” ืฉื‘ื•ืขื™ืช. 2. ืฉื‘ื•ืข ื”ื‘ื ืืฆื™ื’ ื˜ื™ืคื™ื ืœืขื‘ื•ื“ื” ืขื AI ืขืœ ืคืจื•ื™ืงื˜ ืงื™ื™ื ื“ืจืš ื”ื•ืกืคืช ืคื™ืฆ'ืจ ืœืืชืจ ื˜ื•ืงื•ื“: ื ืชื—ื™ืœ ืœื”ื•ืกื™ืฃ ื“ืฃ ื ื—ื™ืชื” ืœืงื‘ื•ืฆืช ืœื™ืžื•ื“ ื” AI ืฉืœ ื™ืžื™ ื—ืžื™ืฉื™ ื‘ื‘ื•ืงืจ. ืื ื™ ืžืงื•ื•ื” ืฉืขื“ ืกื•ืฃ ื”ืฉืขื” ื”ื“ืฃ ืืคื™ืœื• ื™ื”ื™ื” ื‘ืื•ื•ื™ืจ. ื”ืžืคื’ืฉ ื™ื”ื™ื” ื‘ื–ื•ื ื‘ืื•ืชื• ืœื™ื ืง. 3. ื•ืœืกื™ื•ื ื‘ืงืฉื” ืžื›ื - ืื ื™ ืžืื•ื“ ืืฉืžื— ืœืจืื•ืช ืื™ืš ืืชื ืขื•ื‘ื“ื™ื ืขื AI ื‘ืชื•ืš Cursor ืื• VS Code. ืื ื”ื™ื™ืชื ืืชืžื•ืœ (ื•ื’ื ืื ืœื) ื•ืืชื ืžื•ื›ื ื™ื ืฉื‘ื•ืข ื”ื‘ื ืœื”ืฆื™ื’ 5-10 ื“ืงื•ืช ืื™ืš ืืชื ืขื•ื‘ื“ื™ื ืขื AI ื“ืจืš ืคื™ืฆ'ืจ ืงื˜ืŸ ื›ืชื‘ื• ืœื™ ื•ื ืชืื. ืืคืฉืจ ื“ืจืš ื“ืฃ ืฆื•ืจ ืงืฉืจ ืคื” ื‘ืืชืจ.

ToCode
1 417
ื‘ื•ืงืจ ื˜ื•ื‘ ืขื•ื“ ื—ืžืฉ ื“ืงื•ืช ืžืชื—ื™ืœื™ื ื•ื•ื‘ื™ื ืจ ืขืœ ื›ืœื™ื ืœืงื™ื“ื•ื“ ืขื AI ื–ื” ื”ืœื™ื ืง https://us06web.zoom.us/j/86295492018?pwd=7lGAenxpaXM7oe25PqcDzFkWrhNqpS.1

ToCode
1 417
ื˜ื™ืค npm - ืชืžื™ื“ ืœื‘ื“ื•ืง ืžืกืคืจื™ ื—ื‘ื™ืœื•ืช ื‘ื’ื™ื˜ื”ืื‘ ื›ืŸ ืื ื™ ื™ื•ื“ืข ื–ื” ืœื ื‘ื“ื™ื•ืง ื˜ื™ืค ืื ืื ื™ ืจืง ืžื•ืกื™ืฃ ืœื›ื ืขื‘ื•ื“ื”, ืื‘ืœ ืชืงืฉื™ื‘ื• ืจื’ืข ื›ื™ ื–ื” ื—ืฉื•ื‘. ืฆ'ืืจืœื™ ืืจื™ืงืกื•ืŸ ืคืจืกื ื‘ืชื—ื™ืœืช ื”ื—ื•ื“ืฉ ืืช ื”ืžืžืฆื ื”ื–ื”: https://www.aikido.dev/blog/catching-a-rat-remote-access-trojian-rand-user-agent-supply-chain-compromise ื‘ืงืฆืจื” ืžื™ืฉื”ื• ืžืฆื ื—ื‘ื™ืœืช npm ื‘ืฉื rand-user-agent ืฉื›ื‘ืจ ืœื ื ืชืžื›ืช ืื‘ืœ ื˜ื•ืงืŸ ื”ืขื“ื›ื•ืŸ ืฉืœื” ื”ื™ื” ืคืจื•ืฅ, ืœืงื— ืืช ื”ื˜ื•ืงืŸ ื•ื”ืชื—ื™ืœ ืœืคืจืกื ื’ื™ืจืกืื•ืช "ื—ื“ืฉื•ืช" ืฉืœ ื”ืกืคืจื™ื” ืฉื›ืœืœื• ืกื•ืก ื˜ืจื•ื™ืื ื™. ืžื™ ืฉืžืจื™ืฅ ืืช ืื•ืชืŸ ื’ื™ืจืกืื•ืช ื—ื“ืฉื•ืช ืœืฆื•ืจืš Web Scraping ื™ื’ืจื•ื ืœืžื—ืฉื‘ ืฉืœื• ืขืฆืžื• ืœื”ืคื•ืš ืœื–ื•ืžื‘ื™ ืขื‘ื•ืจ ืžืจื›ื– ื”ืฉืœื™ื˜ื” ื”ื—ืœืœื™ ืฉืœ ืื•ืชื• ืžืคืจืกื ื’ื™ืจืกืื•ืช ืžืกืชื•ืจื™. ื‘ื™ืŸ ื”ืกื™ืžื ื™ื ื”ื—ืฉื•ื“ื™ื ืœื’ื‘ื™ ื”ื—ื‘ื™ืœื”: 1. ื”ื™ื ืžืกื•ืžื ืช ื‘ืชื•ืจ "Deprecated" 2. ืœืคื™ ื”ืชื™ืขื•ื“ ื”ื’ื™ืจืกื” ื”ืื—ืจื•ื ื” ืืžื•ืจื” ืœื”ื™ื•ืช 2.0.82 ืื‘ืœ ื‘ npm ื”ื™ื• ื’ื™ืจืกืื•ืช ื—ื“ืฉื•ืช ื™ื•ืชืจ. 3. ื”ืงื™ืฉื•ืจ ืœื’ื™ื˜ื”ืื‘ ื”ื•ื‘ื™ืœ ืœื“ืฃ ืจื™ืง. ืื ื™ ื™ื•ื“ืข ืฉืืชื ื›ื‘ืจ ืžืกืชื›ืœื™ื ืขืœ ืกื™ืžื•ืŸ Deprecated ื•ืœื ื”ื™ื™ืชื ืœื•ืงื—ื™ื ื—ื‘ื™ืœื” ืฉื›ื‘ืจ ืœื ื ืชืžื›ืช, ืื‘ืœ ืžืกืชื‘ืจ ืฉืžืกืคืจ ื”ื’ื™ืจืกื” ื”ื•ื ื’ื ืกื™ืžืŸ ืื–ื”ืจื” ืงืœ: ื›ื ืกื• ืœื’ื™ื˜ื”ืื‘ ืฉืœ ื”ืคืจื•ื™ืงื˜ (ืชืžื™ื“ ื™ืฉ ืœื™ื ืง ืž npm) ื•ืชืจืื• ืžื” ื”ื’ื™ืจืกื” ื”ื›ื™ ืขื“ื›ื ื™ืช ื•ืื ื–ื” ืชื•ืื ืœืžื” ืฉืืชื ืจื•ืื™ื ื‘ npm. ืžื™ื˜ื™ื‘ื™ ืœื›ืช ื™ื›ื•ืœื™ื ื’ื ืœื”ื™ื›ื ืก ืœืจืฉื™ืžืช ื”ืงื•ืžื™ื˜ื™ื ื•ืœืจืื•ืช ืื ื™ืฉ ืชื•ืจื ืงื•ื“ ื—ื“ืฉ ื‘ื’ื™ืจืกืื•ืช ื”ืื—ืจื•ื ื•ืช, ื•ื ื™ื ื’'ื•ืช AI ื™ื›ื•ืœื™ื ื›ื‘ืจ ืœื›ืชื•ื‘ ืกื•ื›ืŸ AI ืฉื™ืขืฉื” ืืช ื–ื” ื‘ืฉื‘ื™ืœื›ื ืœื›ืœ ื”ื—ื‘ื™ืœื•ืช ื‘ package-lock.json.

ToCode
1 417
ื”ื‘ืขื™ื” ืขื default scope ื‘ Rails ื”ืกื™ืคื•ืจ ืฉืœ ื”ื™ื•ื ื”ื•ื ืขืœ Rails ื›ื™ ืจื™ื™ืœืก ื”ื™ื ื›ืžื• ืคืœืกื˜ืœื™ื ื” ื•ืžืืคืฉืจืช ืœืขืฆื‘ ืืช ื”ืคืจื•ื™ืงื˜ ืื™ืš ืฉืจื•ืฆื™ื, ื•ื›ื™ ืงื•ื“ ืฉืื™ืœืชื•ืช ื‘ืจื™ื™ืœืก ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžืคื•ื–ืจ ื‘ื™ืŸ ื”ืจื‘ื” ืงื‘ืฆื™ื. ืื‘ืœ ื”ืกื™ืคื•ืจ ื”ื•ื ื’ื ืขืœ AI ื•ืื™ืš ื›ืœื™ ืคื™ืชื•ื— ืžื‘ื•ืกืกื™ AI ื™ื›ื•ืœื™ื ืœืขื–ื•ืจ ื’ื ืœืžืคืชื—ื™ื ืขืฆืœื ื™ื ืœื›ืชื•ื‘ ืงื•ื“ ื ื›ื•ืŸ ื™ื•ืชืจ. ื•ื–ืืช ื’ื ื”ื–ื“ืžื ื•ืช ื˜ื•ื‘ื” ืœื”ื–ื›ื™ืจ ืฉืžื—ืจ ื‘ื‘ื•ืงืจ ืื ื™ ืžืขื‘ื™ืจ ื•ื•ื‘ื™ื ืจ ืขืœ ืขื‘ื•ื“ื” ืขื ื›ืœื™ AI ื‘ืคื™ืชื•ื— ืฉืžื™ื•ืขื“ ืœืžืชื—ื™ืœื™ื. ืืฉืžื— ืœืจืื•ืช ื’ื ืืชื›ื ืฉื (ื”ืœื™ื ืง ื™ืขืœื” ืœืงื‘ื•ืฆืช ื˜ืœื’ืจื ื‘ื—ืžื™ืฉื™ ื‘ื‘ื•ืงืจ ืื• ืฉืชืฉืœื—ื• ืœื™ ืžื™ื™ืœ ื•ืืฉืœื— ืœื›ื). ืขื›ืฉื™ื• ื ื—ื–ื•ืจ ืœืจื™ื™ืœืก. ื‘ Rails ื‘ืฉื‘ื™ืœ ืœืฉืœื•ืฃ ืžื™ื“ืข ืžื‘ืกื™ืก ื”ื ืชื•ื ื™ื ืื ื™ ืžืฉืชืžืฉ ื‘ืฉื›ื‘ืช ORM ืฉื ืงืจืืช Active Record. ืœื“ื•ื’ืžื” ื ื™ืงื— ืฉืชื™ ื˜ื‘ืœืื•ืช, ืื—ืช ืฉืœ ืžื•ืฆืจื™ื ื•ืื—ืช ืฉืœ ืงื˜ื’ื•ืจื™ื•ืช, ื•ื‘ื˜ื‘ืœืช ื”ืžื•ืฆืจื™ื ื™ืฉ ืขืžื•ื“ืช ืžืฉืงืœ. ื‘ื“ืฃ ื”ืงื˜ื’ื•ืจื™ื” ืขืœื™ื ื• ืœื”ืฆื™ื’ ืืช ื”ืžื•ืฆืจื™ื ืžืกื•ื“ืจื™ื ืœืคื™ ืžืฉืงืœ ืžื”ืงื˜ืŸ ืœื’ื“ื•ืœ. ืืคืฉืจ ืœื›ืชื•ื‘ ืืช ื”ื’ื“ืจืช ื” ORM ื‘ืจื™ื™ืœืก ื‘ืื•ืคืŸ ื”ื‘ื:
class Category < ApplicationRecord
  has_many :products
end
class Product < ApplicationRecord
  belongs_to :category

  # Default scope to always order products by weight
  default_scope { order(:weight) }
end
ื•ืื– ื‘ืงื•ื“ ืฉืœ ื”ืขืžื•ื“ ื ื•ื›ืœ ืœื”ืกืชื›ืœ ืขืœ ืจืฉื™ืžืช ื”ืžื•ืฆืจื™ื ื‘ืื•ืคืŸ ื”ื‘ื:
category = Category.first
category.products
ื•ื”ื›ืœ ืขื•ื‘ื“ ื•ืžื•ืฆื’ ืœืคื™ ื”ืกื“ืจ ื”ื ื›ื•ืŸ. ืื– ืื™ืคื” ืคื” ื”ื‘ืขื™ื”? ืขื›ืฉื™ื• ืื ื‘ืžืงื•ื ืื—ืจ ื‘ืงื•ื“ ืื ื™ ืจื•ืฆื” ืœื”ืฆื™ื’ ืืช ื”ืžื•ืฆืจื™ื ื‘ืกื“ืจ ื”ืคื•ืš ืื ื™ ื›ื‘ืจ ืœื ื™ื›ื•ืœ ืกืชื ืœืฉืœื•ืฃ ืื•ืชื ืžื‘ืกื™ืก ื”ื ืชื•ื ื™ื ืขื:
category.products.order(weight: :desc)
ืืœื ืฆืจื™ืš ืœื‘ื˜ืœ ืืช ื” order ืฉืœ ื”ืกืงื•ืค ื”ื“ื™ืคื•ืœื˜ื™ ืงื•ื“ื ืขื:
category.products.unscope(:order).order(weight: :desc)
ื‘ืขืฆื ืจื™ื™ืœืก ืื•ืžืจ ืœื ื• - ืชื‘ื—ืจื•, ืื• ืฉืชืงื‘ืœื• ืืช ื” order ื‘ื—ื™ื ื ื‘ื›ืœ ื”ืฉืื™ืœืชื•ืช ื•ืื– ืชืฆื˜ืจื›ื• ืœืขื‘ื•ื“ ืงืฉื” ื›ืฉืชืจืฆื• ืžืฉื”ื• ืขื order ืื—ืจ, ืื• ืฉืชืฆื˜ืจื›ื• ืœื›ืชื•ื‘ ืขื•ื“ ืžื™ืœื” ืฉืœ order ื‘ื›ืœ ืฉืื™ืœืชื” ืฉืฆืจื™ื›ื” ืืช ื”ืžื•ืฆืจื™ื ืœืคื™ ืกื“ืจ. ื”ื‘ืขื™ื” ื›ืืŸ ื”ื™ื ืฉื‘ืžืขืจื›ืช ืงื™ื™ืžืช ืืคื™ืœื• ืœื ื’ื“ื•ืœื” ื”ืจื‘ื” ื™ื•ืชืจ ืงืœ ืœื”ื’ื“ื™ืจ default scope ื•ืœืงื‘ืœ ืืช ื” order ื”ื ื›ื•ืŸ ื‘ื›ืœ ื”ืžืขืจื›ืช ื‘ืžื›ื” ืื—ืช ืžืืฉืจ ืœื”ื’ื“ื™ืจ order ืขืœ ื›ืœ ืฉืื™ืœืชื”, ืื‘ืœ ื”ื’ื“ืจื” ื›ื–ืืช ืชื”ื™ื” ืžื‘ืœื‘ืœืช ื‘ืขื•ื“ ื—ื•ื“ืฉ (ืื• ื›ืžื” ื—ื•ื“ืฉื™ื) ื›ืฉื ืฆื˜ืจืš ืœื”ื•ืกื™ืฃ ืฉืื™ืœืชื” ื—ื“ืฉื” ื•ืœื ื ื–ื›ื•ืจ ืืช ืžื™ื•ืŸ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ. ื•ืคื” ื ื›ื ืก ืœืชืžื•ื ื” ื”ื—ื‘ืจ ืฉืœื™ ืงืœื•ื“: ื›ื™ ื‘ืจื’ืข ืฉืื ื—ื ื• ืขื•ื‘ื“ื™ื ืขื ื›ืœื™ ืคื™ืชื•ื— ืžื‘ื•ืกืกื™ AI ื•ื™ื•ื“ืขื™ื ืœื ืกื— ืืช ื”ืืชื’ืจ ื•ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ืฉืื ื—ื ื• ืจื•ืฆื™ื, ืœืขื“ื›ืŸ order ืขืœ ื›ืœ ื”ืฉืื™ืœืชื•ืช ื‘ืคืจื•ื™ืงื˜ ื ื”ื™ื” ืงืœ ื›ืžื• ืœื”ื•ืกื™ืฃ default scope - ื•ื‘ืฆื•ืจื” ื›ื–ืืช ื™ืฉ ื™ื•ืชืจ ืžื•ื˜ื™ื‘ืฆื™ื” ืœื”ื’ื™ืข ืœืงื•ื“ ื”ื ื›ื•ืŸ.

ToCode
1 417
ืฆื”ืจื™ื™ื ื˜ื•ื‘ื™ื ื›ื•ืœื ืื ื™ ืžื–ื›ื™ืจ ื‘ื™ื•ื ื—ืžื™ืฉื™ ื‘ื‘ื•ืงืจ ืืขื‘ื™ืจ ื•ื•ื‘ื™ื ืจ ื‘ื—ื™ื ื ื•ืืจืื” ืœื›ื ืื™ืš ืœืงื‘ืœ ืงื•ื“ ื˜ื•ื‘ ืž AI (ื•ื’ื ืžื” ื’ื•ืจื ืœืคืจื•ืžืคื˜ื™ื ืฉืœื›ื ืœื™ื™ืฆืจ ืงื•ื“ ื‘ื™ื ื•ื ื™ ืื• ืืคื™ืœื• ื’ืจื•ืข) ืื“ื‘ื™ืง ืคื” ืืช ื”ืœื™ื ืง ื‘ื—ืžื™ืฉื™ ื‘ื‘ื•ืงืจ ืื‘ืœ ื›ื“ืื™ ื›ื‘ืจ ืœืฉืจื™ื™ืŸ ื‘ื™ื•ืžืŸ