38장.Multibutton Form
폼에 submit버튼이 여러개 일때 해당버튼을 구분하는방법.
폼에 submit버튼은 모두 create로 간다.
그렇기 때문에 만약에 두개의 submit버튼이 있을때 구분을 하려고 하는데 그방법을 설명한다.
일반적으로는 parameter에 hash타입으로 commit:버튼명으로 가는데
만약에 rhtml에 <%= submit_tag 'Preview',:name => 'preview_button'%>이라고하면
parameter에 hash타입으로 preview_button:Preview으로 간다. 이렇게 :name 심벌을 이용하여 수정할수 있다.
39장.Customize Field Error
레일즈에서 유효성체크에서 오류가 났을때 해당필드를 원하는 형태로 보여주는 방법을 설명하고 있음.
레일즈에서는 기본적으로 validation을 해주는 기능이 있다.
그래서 값을 않넣거나 그러면 기본적으로 테두리에 빨간div를 감싸게 되는데
그것이 맘에 안든다면 environment.rb에서
ActionView::Base.field_error_proc=Proc.new do|html_tag,instance|
"<span class='field_error'>#{html_tag}</span>"
do
이렇게 수정하고 css를 수정하면 자신이 원하는 대로 보일수 있음.
html_tag는 유효성검증이 안된 html tag가 들어오고 instance에는 error객체가 있음.
참고:How to Change Validation Error Display
40장.Blocks in View
블록을 포함한 helper메소드를 만들어 본다.
굉장히 유용한 팁인것 같다.
sample
# rhtml
<% admin_area do %>
<%= link_to "Edit Task", edit_task_path(@task) %>
<% end %>
# application_helper
def admin_area(&block)
concat('<div class="admin">', block.binding)
block.call
concat("</div>", block.binding)
end
41장.Conditional Validations
일반적으로 모든 유효성체크는 매번 검사하게 되어있다.
하지만 매번검사하는것을 원치 않을때는 :if => :some_method이렇게
조건을 주어서 조건에 맞는경우만 유효성 검사를 할수 있게 할수 있다.
sample
validates_presence_of :password, :if => :should_validate_password?
def should_validate_password?
updating_password || new_record?
end
42장.with_options
보통 많은 레일즈 메서드는 마지막에 해시를 받게된다.
그런데 만약에 여러개의 매소드중에 해시로 받는 부분이 겹친다면 with_options으로
좀더 간단히 표현할수 있다.
sample
routes.rb에서 아래와 같다면
map.login 'login',:controller => 'session',:action=>'new'
map.logout 'logout',:controller => 'session',:action=>'destory'
아래와 같이 수정할수 있다.
map.with_options :controller => 'session' do |sessions|
sessions.login 'login',:action=>'new'
sessions.logout 'logout',:action=>'destory'
do