Program Tip

Ruby on Rails의 숨겨진 기능

programtip 2020. 12. 13. 10:30
반응형

Ruby on Rails의 숨겨진 기능


Ruby의 숨겨진 기능과 함께 제공됩니다 .

다른 하나는 Ruby 관련 예제를위한 더 나은 장소이므로 Rails에 보관하십시오. 게시물 당 하나씩 부탁드립니다.


중복 양식 제출을 방지하기 위해 Rails에는 제출 태그에 대한 좋은 옵션이 있습니다.

submit_tag "Submit", :disable_with => "Saving..."

그러면 제출 버튼에 동작이 추가되어 클릭하면 비활성화되고 "제출"대신 "저장 중 ..."이 표시됩니다.

Rails 4+

 DEPRECATION WARNING: :disable_with option is deprecated and 
 will be removed from Rails 4.1. Use 'data: { disable_with: 'Text' }' instead.

따라서 위는 다음과 같습니다.

submit_tag 'Submit', data: { disable_with: 'Text' }

integer.ordinalize는 얼마 전에 우연히 만난 작은 방법 중 하나입니다.

1.ordinalize = "1st"
3.ordinalize = "3rd"

내가 사랑에 현재 해요 div_forcontent_tag_for

<% div_for(@comment) do %>
  <!-- code to display your comment -->
<% end %>

위의 코드는 이것을 렌더링합니다.

<div id="comment_123" class="comment">
  <!-- code to display your comment -->
</div>

CSS 클래스를 원하십니까 comment other_class? 문제 없어요:

<% div_for(@comment, :class => 'other_class') do %>
  <!-- code to display your comment -->
<% end %>

div가 아닌 스팬을 원하십니까? 문제 없습니다, content_tag_for구조에!

<% content_tag_for(:span, @comment) do %>
<% end %>

# Becomes...

<span id="comment_123" class="comment">
  <!-- code to display your comment -->
</span>

content_tag_for접두사를 사용하려는 경우에도 좋습니다 id. gif를로드하는 데 사용합니다.

<% content_tag_for(:span, @comment, 'loading') do %>
  <%= image_tag 'loading.gif' -%>
<% end %>

# Becomes...

<span id="loading_comment_123" class="comment">
  <img src="loading.gif" />
</span>

설치된 gem 목록을 보려면 다음을 실행할 수 있습니다.

gem server

그런 다음 브라우저를 다음으로 지정하십시오.

http://localhost:8808

rdoc, 웹 및 모든 종속성에 대한 링크가 포함 된 멋진 형식의 gem 목록을 얻을 수 있습니다. 다음보다 훨씬 좋습니다.

gem list

Ruby 클래스 정의가 활성화되어 있고 Rails가 프로덕션 환경에서 클래스를 캐시한다는 사실을 활용하여 애플리케이션이 시작될 때 데이터베이스에서만 상수 데이터를 가져 오도록 할 수 있습니다.

예를 들어 국가를 나타내는 모델의 Country.all경우 클래스가로드 될 때 쿼리 를 수행하는 상수를 정의합니다 .

class Country < ActiveRecord::Base
  COUNTRIES = self.all
  .
  .
  .
end

를 참조하여보기 템플릿 (선택 도우미 내에서) 내에서이 상수를 사용할 수 있습니다 Country::COUNTRIES. 예를 들면 :

<%= select_tag(:country, options_for_select(Country::COUNTRIES)) %>

environment.rb에서 새로운 날짜 / 시간 형식을 정의 할 수 있습니다.

[Time::DATE_FORMATS, Date::DATE_FORMATS].each do |obj|
  obj[:dots] = "%m.%d.%y"
end

따라서 뷰에서 다음을 사용할 수 있습니다.

Created: <%= @my_object.created_at.to_s(:dots) %>

다음과 같이 인쇄됩니다.

Created: 06.21.09

일부 클래스 메서드와 일부 명명 된 범위가있는 모델이있는 경우 :

class Animal < ActiveRecord::Base
  named_scope 'nocturnal', :conditions => {'nocturnal' => true}
  named_scope 'carnivorous', :conditions => {'vegetarian' => true}

  def self.feed_all_with(food)
    self.all.each do |animal|
      animal.feed_with(food)
    end
  end
end

그런 다음 명명 된 범위를 통해 클래스 메서드를 호출 할 수 있습니다.

if night_time?
  Animal.nocturnal.carnivorous.feed_all_with(bacon)
end

이제 Rails 2.3.x에서 다음을 수행 할 수 있습니다.

render @items

훨씬 간단합니다 ..


제가 좋아하는 것 중 하나부터 시작하겠습니다. 컬렉션으로 부분을 호출 할 때 컬렉션을 반복하고 각 항목에 대해 호출하는 대신 다음을 사용할 수 있습니다.

render :partial => 'items', :collection => @items

항목 당 한 번씩 부분을 호출하고 매번 지역 변수 항목을 전달합니다. @item을 검사하지 않아도됩니다.


테스트 스위트에 대한 모델의 동작을 변경할 수 있습니다. 몇 가지 after_save 메소드가 정의되어 있고 단위 테스트에서 발생하지 않기를 원한다고 가정하십시오. 작동 방식 :

# models/person.rb
class Person < ActiveRecord::Base

  def after_save
    # do something useful
  end

end


# test/unit/person_test.rb
require 'test_helper'

class PersonTest < ActiveSupport::TestCase

  class ::Person
    def after_save
      # do nothing
    end
  end

  test "something interesting" do
    # ...
  end
end

재미있는 기능은 배열이 42 요소에 액세스하는 특별한 방법이 있다는 것입니다.

a = []
a.forty_two

http://railsapi.com/doc/rails-v2.3.8/classes/ActiveSupport/CoreExtensions/Array/Access.html#M003045


If you add routing for a resource:

ActionController::Routing::Routes.draw do |map|
  map.resources :maps
end

And register additional mime-types:

Mime::Type.register 'application/vnd.google-earth.kml+xml', :kml

You don't need a respond_to block in your controller to serve these additional types. Instead, just create views for the specific types, for example 'show.kml.builder' or 'index.kml.erb'. Rails will render these type-specific templates when requests for '/maps.kml' or '/maps/1.kml' are received, setting the response type appropriately.


ActionView::Base.default_form_builder = MyFormBuilderClass

Very useful when you're creating your own form builders. A much better alternative to manually passing :builder, either in your views or in your own custom_form_for helper.


The returning block is a great way to return values:

def returns_a_hash(id)
  returning Hash.new do |result|
   result["id"] = id
  end
end

Will return a hash. You can substitute any other types as well.


Get everything printed with rake routes programmatically:

Rails.application.routes

참고URL : https://stackoverflow.com/questions/709679/hidden-features-of-ruby-on-rails

반응형