모델과 관련이없는 rails simple_form 필드
'주문'이라는 이름, 참조 번호 제출 같은 신용 카드 정보를 구축하여 결제 게이트웨이 처리 할 새 양식 필드를 추가하고 싶습니다.
그러나 CC 정보를 데이터베이스에 저장하고 싶지 않기 때문에 주문 테이블에 해당 열이 없습니다. 그리고 신용 카드 입력 필드가 주문 모델의 '일부'가 아니라 양식을 생성 할 때 오류가 발생합니다.
attr_accessor를 사용할 수 있습니다.
class Order < ActiveRecord::Base
attr_accessor :card_number
end
이제 Order.first.card_number = '54421542122'
양식이나 필요한 다른 작업을 수행 하거나 사용할 수 있습니다 .
루비 문서 http://www.ruby-doc.org/core-1.9.3/Module.html#method-i-attr_accessor 및 유용한 스택 오버플로 질문 은 여기 루비에서 attr_accessor 란 무엇입니까?
attr_accessible과 혼동하지 않습니다! attr_accessor와 attr_accessible의 차이점
내가 당신의 대답을 정확하게 이해한다면, 당신이 설명하고 싶은 것은 여기의 공식적인 위키 페이지에 존재합니다 : 속성을 읽지 않는 가짜 입력을 만드세요 . Edward의 제안에 따라 실제 데이터베이스 열과 관련이없는 필드를 사용할 수있는 양식 필드가 모델과 관련이없는 경우 모델에 속성을 정의 할 필요가 없습니다.
요약하면 페이지에서 설명하는 트릭은 'FakeInput'이라는 사용자 정의 입력을 정의하고 다음과 같이 사용하는 것입니다.
<%= simple_form_for @user do |f| %>
<%= f.input :agreement, as: :fake %>
....
Fitter Man이 언급 한대로 사용자 정의 후에는 Rails 서버를 다시 시작하는 것을 잊지 마세요.
UPDATE : 것을 제발 참고 공식 위키 페이지가 업데이트 된 위키 페이지의 샘플 코드는 SimpleForm의 이전 버전을 사용하는 사람들을 위해 작동하지 않습니다 . 와 같은 오류가 발생하면 대신 아래 코드를 사용하십시오 undefined method merge_wrapper_options for...
. 3.0.1을 사용하고있는 코드는 잘 작동합니다.
class FakeInput < SimpleForm::Inputs::StringInput
# This method only create a basic input without reading any value from object
def input
template.text_field_tag(attribute_name, input_options.delete(:value), input_html_options)
end
end
이를 처리하는 가장 좋은 방법은 simple_fields_for
다음과 같이 사용하는 것입니다.
<%= simple_form_for @user do |f| %>
<%= f.input :first_name %>
<%= f.input :last_name %>
<%= f.input :email %>
<%= simple_fields_for :other do |o| %>
<%= o.input :change_password, as: :boolean, label: 'I want to change my password' %>
<% end %>
<% end %>
이 예에서는 change_password
기본 user
모델의 일부 가 아닌 새 필드를 추가했습니다 .
이것이 좋은 접근 방식 인 이유는 간단한 양식 입력 / 래퍼를 사용할 수 있기 때문입니다. @baxang의 답변은 다른 유형의 입력을 사용할 수 없기 때문에 신경 쓰지 언어입니다. 이것은 더 유연 해입니다.
작업을 수행이하려면로 전달해야 우리 :other
했습니다 simple_fields_for
. 동일한 이름을 가진 모델이없는 모든 페이지 / 기호 를 사용할 수 있습니다 .
불행히도 :user
simple_form이 사용을 인스턴스화하려고 모델 시도하고 동일한 오류 메시지가 다시-display되므로 전달할 수 없습니다 .
추가 작업을 추가하고 가져 params
오려고하지만 모델의 해시 제외하면 FormTagHelpers를 수행 할 수 있습니다. http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html
예 :
<%= simple_form_for resource, :as => resource_name, :url => invitation_path(resource_name), :html => {:method => :post} do |f| %>
<%= devise_error_messages! %>
<% resource.class.invite_key_fields.each do |field| -%>
<%= f.input field %>
<%= hidden_field_tag :object_name, @object.class.name %>
<%= hidden_field_tag :object_id, @object.id %>
<% end -%>
매우 간단하고 다소 이상한 해결 방법을 찾았습니다.
안에 input_html
아무 value
키나 옵션을 추가하기 만하면 됩니다. 예 :
= simple_form_for @user do |f|
= f.input :whatever, input_html: {value: ''}
테스트 된 simple_from 버전 : 3.2.1, 3.5.1
참고 URL : https://stackoverflow.com/questions/12146466/rails-simple-form-fields-not-related-to-the-model
'ProgramingTip' 카테고리의 다른 글
템플릿 클래스를 typedef하는 방법은 무엇입니까? (0) | 2020.10.29 |
---|---|
srand () — 한 번만 호출하는 이유는 무엇입니까? (0) | 2020.10.29 |
동일한 키를 가진 개체가 ObjectStateManager에 이미 있습니다. (0) | 2020.10.29 |
몽구스, 배열의 값 업데이트 (0) | 2020.10.29 |
내 ArrayList에 목록에 마지막으로 추가 된 항목의 N 개의 복사본이 포함 된 이유는 무엇입니까? (0) | 2020.10.29 |