2015-01-29 3 views
0

을 단축 form_for :레일 : 나는 현재 레일을 배우고 나는 다음과 같은 코드가 코드

<%= form_for(@account) do |f| %> 

    <%= f.label :username %> 
    <%= f.text_field :username, class: 'form-control' %> 

    <%= f.label :email %>  
    <%= f.email_field :email, class: 'form-control' %> 


    <%= f.label :password %> 
    <%= f.password_field :password, class: 'form-control' %> 

    <%= f.label :password_confirmation, "Confirm your password" %> 
    <%= f.password_field :password_confirmation, class: 'form-control' %> 

    <%= f.label :website %> 
    <%= f.text_field :website, class: 'form-control' %> 

    <%= f.submit "Sign up!", class: "btn btn-primary" %> 

<% end %> 

내가 glyphicons를 추가 할, 그래서 필드 중 하나에 대한 코드 (: 이메일은) 그래서 다음과 같습니다

<div class="input-group"> 
     <div class="input-group-addon"> 
     <span class="glyphicon glyphicon-user"></span> 
     </div> 

     <%= f.email_field :email, class: 'form-control' %> 
    </div> 

문제는 모든 필드에 대해이 작업을 수행하려고합니다.

그러나 그런 다음 글리프콘 - * 및 필드 이름 (및 암호 필드의 필드 유형)을 변경하여 모든 필드에 동일한 명령문을 복사하여 붙여 넣어야합니다. 이 작업을 수행하는 데 더 간단한 DRY 방법이 있습니까?

+4

뷰 도우미 메서드에서 메서드를 정의하고 그것에서 사용자 정의 HTML을 반환합니다. –

+0

고마워, 나는 너의 방식대로 해냈다. 거기에있는 사람 : 원시() 메서드를 사용하여 도우미에서 사용자 지정 HTML을 반환하십시오. –

답변

0

아론 스웨인의 방법은 정확하지만 나는

<%= form_for(@account) do |f| %> 

    <%= f.label :username %> 
    <%= render partial 'input_field_password.html.erb', locals: {f: f, field_name: :user_name}%> 

    <%= f.label :email %>  
    <%= render partial 'input_field_password.html.erb', locals: {f: f, field_name: :email} %> 


    <%= f.label :password %> 
    <%= render partial 'input_field_password.html.erb', locals: {f: f, field_name: :password}%> 

    <%= f.label :password_confirmation, "Confirm your password" %> 
    <%= render partial 'input_field_password.html.erb', locals: {f: f, field_name: :password_confirmation}%> 

    <%= f.label :website %> 
    <%= render partial 'input_field_password.html.erb', locals: {f: f, field_name: :website}%> 

    <%= f.submit "Sign up!", class: "btn btn-primary" %> 

<% end %> 

또한 더 사용하여 리팩토링 수 대신 _input_field_password.html.erb

<div class="input-group"> 
    <div class="input-group-addon"> 
    <span class="glyphicon glyphicon-user"></span> 
    </div> 

    <%= f.email_field field_name, class: 'form-control' %> 
</div> 

는 이제 form.erb을 변경 생각한 부분 별도의 사용 제안 루프

<%= form_for(@account) do |f| %> 
    <% [:username, :email, :password, :password_confirmation, :website].each do |field_name| 
    <%= f.label :field_name %> 
    <%= render partial 'input_field_password.html.erb', locals: {f: f, field_name: :field_name}%> 
    <%end%> 
    <%= f.submit "Sign up!", class: "btn btn-primary" %> 

<% end %> 
+0

좋은 답변입니다! Alon Swain과 함께 사용하여 코드를 더 멋지게 보이게 만들었습니다. –

+0

Upvote 그리고 그것을 받아주세요 :) – Abk

+0

upvote 수 없습니다, 충분한 담당자! :(해결책은 받아 들였습니다. –

관련 문제