[RUBY-ON-RAILS] 레일 3.0에서 f.error_messages
RUBY-ON-RAILS레일 3.0에서 f.error_messages
3.0되지 f.error_messages 레일 이제 제대로 작동하려면 플러그인이 필요합니다 - 나는 그러나 오류 메시지에게 (신규) 기본 방법을 표시하는 방법을 배우고 싶어요. 나는 의견 양식을 구현할 때 사용되지 않는 방법을 사용하여 시작 설명서를, 다음입니다. 예를 들면 :
<h2>Add a comment:</h2>
<%= form_for([@post, @post.comments.build]) do |f| %>
<%= f.error_messages %>
<div class="field">
<% f.label :commenter %><br />
<%= f.text_field :commenter %>
</div>
<div class="field">
<%= f.label :body %><br />
<%= f.text_area :body %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
여기에 (인공 지지체에 의해 생성 된) 그것을 할 올바른 방법입니다 :
<%= form_for(@post) do |f| %>
<% if @post.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>
<ul>
<% @post.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
. . .
나는 후자의 예에서 @post 변수를 사용하는 것이 이해하지만 댓글 작성에 대한 오류 메시지를 얻을 이전에 어떤 변수를 참조 할 수 있습니까?
해결법
-
==============================
1.난 그냥 docrails GitHub의 문제로보고, 그들은 덧글에 대한 검증을 수행하는 방법을 설명하는 대신 f.error_messages을 제거하기로 결정했습니다.
난 그냥 docrails GitHub의 문제로보고, 그들은 덧글에 대한 검증을 수행하는 방법을 설명하는 대신 f.error_messages을 제거하기로 결정했습니다.
-
==============================
2.양식에 error_messages을 구현하는 가장 깨끗한 방법은 FormBuilder에 error_messages을 구현하는 것입니다.
양식에 error_messages을 구현하는 가장 깨끗한 방법은 FormBuilder에 error_messages을 구현하는 것입니다.
예를 들어, 여기에 내가 내 마지막 프로젝트 구현 한 error_messages 방법입니다. 자신의 FormBuilder를 위치 : implemeting하여 당신은 당신의 webdesigner의 규칙과 스타일을 따를 수 ... 다음은 그 예입니다 출력됩니다 UL의 오류 목록 / 리는 일부 사용자 지정 스타일로이다 :
class StandardBuilder < ActionView::Helpers::FormBuilder def error_messages return unless object.respond_to?(:errors) && object.errors.any? errors_list = "" errors_list << @template.content_tag(:span, "There are errors!", :class => "title-error") errors_list << object.errors.full_messages.map { |message| @template.content_tag(:li, message) }.join("\n") @template.content_tag(:ul, errors_list.html_safe, :class => "error-recap round-border") end end
그럼 내 형태 :
= f.error_messages
그리고 그게 다야.
-
==============================
3.나는 확신 모두 당신이해야 할 것 post.comments @ 참조입니다 해요
나는 확신 모두 당신이해야 할 것 post.comments @ 참조입니다 해요
당신이 뭔가를 같이 할 수 있도록 :
<% @post.comments.each do |comment| %> <% if comment.errors.any? %> <% comment.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> <% end %> <% end %>
아니면 그냥 밖으로 모든 오류를 당겨 :
comment_errors = @post.comments.map(&:errors)
출력에 디스플레이 로직 주석 각 오류에 그들을 통해 다음 루프.
-
==============================
4.이 기능은 독립형 보석 dynamic_form로 존재한다.
이 기능은 독립형 보석 dynamic_form로 존재한다.
당신의 Gemfile에 다음을 추가
gem 'dynamic_form'
GitHub의 페이지에서 :
DynamicForm 당신이 당신의 Rails3 모델을 다루는 데 도움이되는 몇 가지 헬퍼 방법을 보유하고, 그들이 있습니다 :
또한 양식 빌더에 f.error_messages 및 f.error_message_on을 추가합니다.
-
==============================
5.여기에 전체 오류 현장 내 솔루션입니다.
여기에 전체 오류 현장 내 솔루션입니다.
나는 간단하게 렌더링 할 때 하나가 통과 할 모델 변수를 사용하는 부분을 만들어 :
<%# app/views/errors/_error.html.erb %> <%= content_for :message do %> <% if model.errors.any? %> <ul> <% model.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> <% end %> <% end %>
당신은 쉽게 동적 HTML 클래스 및 / 또는 모델의 이름에 따라 ID 이름뿐만 아니라 일반적인 사람을 추가 할 수 있습니다.
나는 나의 오류 메시지가 레이아웃 파일의 모든 같은 장소에서 렌더링 가지 설정을 가지고 :
<%# app/views/layouts/application.html.erb %> <%= yield :message %>
하나는 그 기능을 원하지 않은 경우, 부분에 content_for을 제거하는 트릭을 할 것입니다. 그리고 정말 모든보기에 당신은 당신이 간단하게 쓸 수 있습니다 원하는 :
<%= render 'errors/error', model: @some_model %>
하나 더 모음을 취하고 상기 부분적인 오류를 활용되는 부분을 작성하여 확장 할 수 :
<%# app/views/errors/_collection.html.erb %> <% collection.each do |model| %> <%= render 'errors/error', model: model %> <% end %>
그것을 함께 렌더링 :
<%= render 'errors/collection', collection: @some_model.some_has_many_association %>
나는이 방법을 좋아한다. 그것은 쉽게 관리 / 유지, 믿을 수 없을만큼 tweakable하는, 간단합니다. 이게 도움이 되길 바란다!
편집 : HAML의 모든 것
-# app/views/errors/_error.html.haml = content_for :message do - if model.errors.any? %ul - model.errors.full_messages.each do |msg| %li= msg
-# app/views/layouts/application.html.haml = yield :message
= render 'errors/error', model: @some_model
-# app/views/errors/_collection.html.haml - collection.each do |model| = render 'errors/errors', model: @some_model
= render 'errors/_collection', collection: @some_model.some_has_many_association
-
==============================
6.I는 [@post @ post.comments.build] 배열은 단지 form_for polymorphic_path의 내부로 전달되는 것을 생각한다. 이 코멘트 (이 경우에는 추천 / 포스트 / 1 / 코멘트)를위한 서브 - 리소스 경로를 생성한다. 그래서 바로 첫 번째 예를 사용하는 같은 게시물에 하위 자원 등의 의견을 보이는?
I는 [@post @ post.comments.build] 배열은 단지 form_for polymorphic_path의 내부로 전달되는 것을 생각한다. 이 코멘트 (이 경우에는 추천 / 포스트 / 1 / 코멘트)를위한 서브 - 리소스 경로를 생성한다. 그래서 바로 첫 번째 예를 사용하는 같은 게시물에 하위 자원 등의 의견을 보이는?
그래서 실제로 여기에 호출 될 컨트롤러는 CommentsController이다. 루카스 '솔루션은 당신을 위해 일을하지 않는 이유는 주석을 만들 때 실제로 form_for 호출 할 때 당신이보기에 사용 문제가되지 않습니다 (컨트롤러 내부 post.comments.build @ 사용하지 않는 것이있을 수 있습니다 ). CommentsController 번호는 방법은 (다소)과 같아야 만들 :
def create @post = Post.find(params[:post_id] @comment = @post.comments.build(params[:comment]) if(@comment.save) # you would probably redirect to @post else # you would probably render post#show or wherever you have the form end end
그럼 당신은 발판에 의해 생성 된 코드를 사용할 수 있습니다 만 form_for 호출을 제외한 모든 라인에 @comment와 @post 인스턴스 변수를 대체합니다.
나는 또한 표시이 양식 form_for 사용 ([포스트 @ @comment], ...) 형태로 내용을 유지하는 제어 방법에 @comment = @ post.comment.build를 추가하는 것이 좋습니다 것 같아요 거기 오류의 경우 형태로 표시됩니다.
이 일을하지 않는 당신이 그것을 알아낼 수없는 경우, 귀하의 CommentsController 번호가 질문에 대한 방법을 만들 추가하시기 바랍니다.
from https://stackoverflow.com/questions/3873190/f-error-messages-in-rails-3-0 by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 가장 좋은 방법은 레일 + 포스트 그레스에 임의의 시간 간격으로 기록을 계산하려면 (0) | 2020.02.16 |
---|---|
[RUBY-ON-RAILS] 액티브는 레일 : 현재 사용자를 제외한 모든 사용자 찾기 (0) | 2020.02.16 |
[RUBY-ON-RAILS] 어떻게 레일의 URL에서 쿼리 문자열을 얻을 수 있습니다 (0) | 2020.02.16 |
[RUBY-ON-RAILS] 이 레일에 루비의 쿼리 문자열 인 것처럼 문자열을 구문 분석 (0) | 2020.02.16 |
[RUBY-ON-RAILS] 어떻게 레일 콘솔에서 고안를 사용하여 사용자가 로그인하는? (0) | 2020.02.16 |