为什么表单自动提交在rails中的show动作?

时间:2012-05-06 03:56:33

标签: ruby-on-rails forms validation

我有这个form_for在我的用户#show template

上的两个用户之间发送私人消息
<%= form_for([current_user, @message])  do |f| %>
    <%= f.hidden_field :to_id, :value => @user.id %>
    <div class="message_field">
        <%= f.text_area :content, placeholder: "Send a private message..." %>
    </div>
   <%= f.submit "Post", class: "btn btn-large btn-primary" %>
   <span class="message_countdown"></span>
<% end %>

在我的留言模型中,我有

belongs_to  :to,
    :class_name => 'User',
    :foreign_key => :to_id

validates :content, presence: true, length: { maximum: 1000 }
validates :user_id, :to_id, presence: true

奇怪的是,第一次创建用户并导航到他们的节目简介时,

他们已经收到此错误

The form contains 2 errors.
* Content can't be blank
* To can't be blank

一旦刷新页面,它们就会消失。并且表单正常运行。我似乎无法弄清楚出了什么问题。表格是否已经尝试自动提交?

关于我的消息#create action i have

def create
    @message = current_user.messages.build
    @message.to_id = params[:message][:to_id]
    @message.user_id = current_user.id
    @message.content = params[:message][:content]
    if @message.save
        flash[:success ] = "Private Message Sent"
    end
        redirect_to user_path(params[:message][:to_id])
end

如果它有任何光明。我手动分配@msessage属性因为我不想做:user_id attr_accessible。

但是,为什么仅在第一次访问页面时验证已经失败?我不提交。一旦我离开页面并回到它,错误就不再发生了。

这是我的用户#show action

  def show
    @user = User.find(params[:id])
    @microposts = @user.microposts.paginate(page: params[:page])
    @current_user = current_user
    if user_signed_in?
        @message = current_user.messages.build(params[:messages], to_id: @user.id)
    end
    @influence = current_user.points
    @badge_items = current_user.badges.to_a.map(&:name)
  end

是否必须对我的节目动作做些什么?具体

@message = current_user.messages.build(params[:messages], to_id: @user.id)

是调用创建吗?

帮助将不胜感激。谢谢!

更新。我修好了!

而不是......

@message = current_user.messages.build(params [:messages],to_id:@ user.id)

我刚刚做了

@message = current_user.messages.build

我想这个问题更多......它正在寻找消息值和用户ID,但还没有通过。谢谢!

1 个答案:

答案 0 :(得分:0)

是的,

@message = current_user.messages.build(params[:messages], to_id: @user.id)

正在尝试创建Message对象。

以下是has_many上Rails指南的链接,其中介绍了messages.build将如何构建新记录的详细信息。

http://guides.rubyonrails.org/association_basics.html#has_many-association-reference