2011-02-01 14 views
2

私は、自分のRailsビューの別のコントローラからアクションにアクセスするためにform_tagを使用しました。これは私にエラーメッセージを表示するためのトラブルを引き起こしています。私はまた、潜在的に問題を引き起こしている可能性が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 

そして、(私のUserモデル上の)私の見解

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

あなたはエラーがであることを確認することができます。action =>「新しい」あなたと、エラーメッセージを表示することができなければならないかわりに、次のよう試みることができます@ post.errorsもあなたのログに表示します。

+0

私はまだサーバー出力に何かが届いているのを見ていません。これは、format.html {render:action => "new"}が何もしていないかのようです。 render @ post.errorを試してみました。エラーがサーバー出力に渡されているように見えますが、私の見解にアクセスする方法がわかりません。 – James

+0

私はその情報で私の答えを更新しました。レンダリング:action => 'new'は正しいです。 –

+0

検証することができないものを保存しようとするとコンソールから作業します。@ post.saveにはfalseが返されます。 @ post.errorsを呼び出すと、エラーメッセージが返されます。私はフォームを送信するためにJqueryを使用しています - そして、私が何をしているにせよ、私のサーバーの出力にPOSTが表示されます。ポストされたposts/new.html.erbもPOST後のサーバ出力の最後に表示されるので、なぜエラーメッセージが表示されないのかわかりません。助けてくれてありがとう! – James

関連する問題