对于我的 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)
但回到正题,当我渲染“用户/节目”时,它似乎找不到我的任何变量。它进入我的用户显示视图,抱怨......
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。如果我确实重新初始化了所有变量,我是否还需要将所有模板移动到共享文件夹中,因为它会抱怨这一点。
还是有更好的方法来做到这一点?也许就像渲染“新”,然后重定向到用户#show?