2011-02-01 6 views
2

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

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

 
# 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 %> 
+0

В чем проблема? –

+0

вывод сервера показывает сообщение, но затем сообщение об ошибке не возвращается. Когда вход соответствует проверке, сообщение работает, когда в браузере ничего не происходит. – James

ответ

2

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

 
# 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 

После вызова оказывают: действие => «новый», вы должны иметь возможность просматривать сообщения об ошибках с:

 
<%= error_messages_for @post %> 

Вы можете проверить, что есть ошибки по отображая @ post.errors в вашем журнале.

+0

Я до сих пор не вижу ничего на выходе моего сервера. Это как будто format.html {render: action => "new"} ничего не делает. Я попробовал render @ post.error, и похоже, что ошибка передается на мой серверный вывод, но я не уверен, как получить к нему доступ в моем представлении. – James

+0

Я также обновил свой ответ с этой информацией. Результат: action => 'new' правильный. –

+0

Работая с консолью, когда я пытаюсь сохранить что-то, что не может быть проверено, я получаю false для @ post.save. Затем вызов @ post.errors возвращает сообщение об ошибке. Я использую Jquery для отправки формы - и независимо от того, что я делаю, POST показывает на выходе моего сервера. rendered posts/new.html.erb также отображается в конце вывода сервера после POST, поэтому я не уверен, почему сообщения об ошибках не отображаются с ним. Спасибо за тонну за помощь! – James

Смежные вопросы