Rails アプリで、エラー メッセージが正しく表示されません。その理由は、検証が失敗したときに、コントローラーがレンダリングではなくリダイレクトを行ったためだと思います。ただし、レンダリングに問題があります。すべての変数が欠落しているようです。たとえば、私の pub_messages#create では...
def create
@pub_message = current_user.pub_messages.build
@pub_message.to_id = params[:pub_message][:to_id]
@pub_message.user_id = current_user.id
@pub_message.content = params[:pub_message][:content]
if @pub_message.save
flash[:success ] = "Your post has been sent"
redirect_to user_path(params[:pub_message][:to_id])
else
render 'users/show'
end
end
^(ちなみに、セキュリティ上の問題があるため、各属性を手動で保存しているため、:to_id attr_accessible は作成しませんでした)
しかし、ポイントに戻ると、「users/show」をレンダリングすると、変数が見つからないように見えます。それは私のユーザーのショービューに入り、それは不平を言います...
undefined method `name' for nil:NilClass
1: <% provide(:title, @user.name) %>
ただし、users#show アクションに行った場合は、@user と宣言しました。
def show
@user = User.find(params[:id])
@current_user = current_user
if user_signed_in?
@message = current_user.messages.build
@pub_message = current_user.pub_messages.build
end
@feed_items = @user.feed.paginate(page: params[:page], per_page: 20)
end
私は行方不明ですか、それとも何か間違っていますか?ありがとうございました
更新:ショーアクションには行かないようです。表示されないエラー メッセージを解決するにはどうすればよいですか? リダイレクトすると、ブラウザはすぐに新しいページを要求しませんか? したがって、私のエラーメッセージは表示されませんか?
UPDATE2: そう...私は実際にはモデルの「新しい」ページから来ているのではなく、代わりにユーザーのショーテンプレートから来ています。テンプレートには、次のものがあります
<%= form_for([current_user, @pub_message]) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.hidden_field :to_id, :value => @user.id %>
<div class="micropost_message_field">
<%= f.text_area :content, placeholder: "Comments?", :id => 'public_message_text' %>
</div>
<%= f.submit "Post", class: "btn btn-large btn-primary" %>
<% end %>
これはオブジェクトが構築される場所であり、最終的に私の pub_messages#create に送られます。すべての変数を再初期化する場合、共有フォルダー内のすべてのテンプレートも移動する必要がありますか?
またはこれを行うためのより良い方法はありますか?'new' をレンダリングしてから users#show にリダイレクトするようなものかもしれません。