Сообщения об ошибках с form_tag в отдельном контроллере Rails 3 - PullRequest
2 голосов
/ 01 февраля 2011

Я использовал form_tag для доступа к действию из другого контроллера в одном из моих представлений Rails.Это вызвало проблемы при рендеринге сообщения об ошибке.Я также использую JQuery, который потенциально может вызывать проблемы.Я читал, что form_tag не привязан к модели, так что это может означать, что что-то вроде validates_uniqueness_of может не работать.Был бы признателен за помощь в понимании проверки с form_tag!

Для справки, вот мой контроллер:

# app/controllers/posts_controller.rb
def create
  @post = Post.new
  @post.text = params[:text]
  @post.user_id = current_user.id
  @post.save

  respond_to do |format|
    if @post.save
      format.js
      format.html { redirect_to(username_path(:username => current_user)) }
      format.xml  { render :xml => @post, :status => :created, :location => @post }
    else
      format.html { render :action => "new" }
      format.xml  { render :xml => @post.errors, :status => :unprocessable_entity }
    end
  end
end

И мой взгляд (на мою модель пользователя)

# app/views/users/show.html
<% form_tag({:controller => "posts", :action => "create"}, :method => "post", :class => 'newpost') do %>
  <%= error_messages_for :post  %>
  <%= text_field_tag :text, params[:text] %>
  <%= image_submit_tag("../images/add.png", :border => 0, :class => "submitadd") %>
%lt;% end %>

1 Ответ

2 голосов
/ 01 февраля 2011

Думаю, проблема в том, что вы дважды сохраняете и каким-то образом очищаете некоторые сообщения об ошибках.Вместо этого вы можете попробовать следующее:

# app/controllers/posts_controller.rb
def create
  @post = Post.new
  @post.text = params[:text]
  @post.user_id = current_user.id

  respond_to do |format|
    if @post.save
      format.js
      format.html { redirect_to(username_path(:username => current_user)) }
      format.xml  { render :xml => @post, :status => :created, :location => @post }
    else
      format.html { render :action => "new" }
      format.xml  { render :xml => @post.errors, :status => :unprocessable_entity }
    end
  end
end

После вызова render: action => 'new' вы сможете просматривать сообщения об ошибках с:ошибки также отображаются в вашем журнале @ post.errors.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...