2011-03-03 5 views

답변

107

당신은 첫 번째 인수로 :symbol를 사용할 수 있습니다.

<form novalidate="novalidate" class="simple_form user" action="/users" accept-charset="UTF-8" method="post"> 
    ... 
    <div class="input string required user_name"> 
    <label class="string required" for="user_name"> 
     <abbr title="required">*</abbr> Name 
    </label> 
    <input class="string required" type="text" name="user[name]" id="user_name" /> 
    </div> 
    ... 
</form> 
+0

종류의 무의미하지만 그래? 대체 텍스트 필드 생성기를 사용할 때 simple_form_for의 이점을 얻지 못합니다. – toxaq

+3

@toxaq 아마 좋은 예가 아닙니다. 'f.input : name, : as as => : string'을 사용하여 레이블, 힌트 등으로 평범한 양식을 생성 할 수 있습니다. – htanata

+6

이상하게도 그게 정확히 내가하려는 일이고 성공하지 못했습니다. 귀하의 예제는 '정의되지 않은 메소드'이름을 제공합니까? ' 무조건 NilClass'는 나를 위해. – toxaq

2

또한 simple_form_for에 대한 인수로 대신 @object:symbol을 전달할 수 :

<%= simple_form_for :user, url: users_path do |f| %> 
    <%= f.input :name, as: :string %> 
    ... 
<% end %> 

그것은이 같은 출력 뭔가 것이다. 출력은

<%= simple_form_for :email, :url => '/post_email' do |f| %> 
    <%= f.input :subject, :as => :string %> 
<% end %> 

는 어느 것 :

<form method="post" class="simple_form email" action="/post_email" accept-charset="UTF-8"> 
    ... 
    <input type="text" size="30" name="email[subject]" id="email_subject"> 
</form> 

다음 무승부 - 백업의주의하십시오 :

  • 당신은 자동 모델 검증
  • 필요를 이용할 수 없습니다 :url과 각 유형을 명시 적으로 정의하기 위해 input
+3

이 옵션은 여전히 ​​커버 아래에있는 모델을 사용합니다. 기호는 모델 이름과 일치해야하며 모델로 해석되고 새 필드를 작성하여 모든 필드에서 사용하므로 양식 필드에 사용 된 특성이 실제로 모델에 있어야합니다. –

13

불행히도 simple_form은 모델 사용에 의존합니다. 본질적으로 레일즈 * _ 태그 도움말과 동일한 simple_form_tag 및 input_tag 메소드를 사용하는 것이 좋을 것입니다. 그때까지는 쉬운 일이 있습니다.

양식에서 클래스 대신 기호를 사용하고 simple_form이 모델 속성에 액세스하지 못하게하려면 값을 명시 적으로 전달하십시오.

<%= simple_form_for :user, :url => '/users' do |f| %> 
    <%= f.text_field :name, input_html: { value: nil } %> 
<% end %> 

이것은 undefined method 'name' for User 오류를 방지합니다.

+2

이것은 나를 위해 일했습니다 : <% = f.input : create_key, input_html : {value : nil}, 필수 : ​​참, 힌트 : "초대에 의해서만, 이메일에 대한 열쇠"% – codenoob

+1

콜렉션을 사용하는 경우, Model' 오류의 '정의되지 않은 메소드'name '을 피하기 위해'value' 대신에'selected'를 사용합니다 –

3

위의 모든 방법을 사용하여 양식 데이터를 "사용자"또는 첫 번째 인수로 전달한 기호와 함께 중첩시킬 수 있습니다. 그거 짜증나네.

simple_form의 스타일/이점을 모방하지만 객체/심볼 종속성과 강제 데이터 중첩을 제거하려면 부분을 생성 할 수 있습니다.

HAML 예 :

양식보기 : 부분

= form_tag("path/to/action", method: "POST") do 
    = render "path/to/partial/field", type: "string", required: true, item: "first_name" 

field :

- required_string = required ? "required" : "" 
%div{class: "input #{type} #{required_string} #{item}"} 
    %label{class: "#{type} #{required_string}", for: "#{item}"} 
    - if required 
     %abbr{title: "required"} 
     * 
    = t("application.#{item}") 
    %input{name: "#{item}",              | 
    placeholder: t("application.#{item}"),         | 
    type: "#{type}",               | 
    required: required,              | 
    "aria-required" => "#{required}" } 
6

또한 함께 simple_fields_for과 같이 양식 모델 내에서 모델 외부 필드를 사용할 수 있습니다

<%= simple_form_for @user do |f| %> 
    <%= f.input :name %> 

    <%= simple_fields_for :no_model_fields do |n| %> 
    <%= n.input :other_field %> 
    <% end %> 
<% end %> 

다른 모델에서 또는 모델을 사용하지 않고 다른 종류의 필드를 만들 수 있기 때문에 간단하고 실용적인 솔루션입니다.

관련 문제