【发布时间】:2011-03-14 16:28:52
【问题描述】:
我似乎无法让流程在这里正常工作。我有一个 Ruby on Rails (2.3.9) 应用程序。对于这个问题,我们只有几个资源。 Boxes 和 Messages。
Box has_many :messages
Message belongs_to :box
我创建了一个位于 /boxes/1/new_message 的视图,其中我有以下 form_for 代码。我可以从这个视图成功地创建一条消息。当我的验证开始时,问题就出现了。
在这种情况下,message.body 不能为空,并由message.rb 验证。一旦发生此验证,它会将用户踢到 Message.new 操作,并且在成功填写 message.body 后,应用程序无法再找到 @box.id 以放置在 message.box_id 中。
我已经尝试了几乎所有我能想到的方法,但不确定如何让用户接收验证并仍然成功地为框创建消息。请参阅下面的代码以供参考。
/views/boxes/new_message.html.erb
<% form_for [@box, Message.new] do |f| %>
<%= f.error_messages %>
<%= f.label :message_title %>
<%= f.text_field (:title, :class => "textfield-message grid_12 alpha") %>
<%= f.label :message_body %>
<%= f.text_area (:body, :class => "textarea-message grid_12 alpha ") %>
<%= f.submit "Add a Message", :class => 'input boxy' %>
<% end %>
messages_controller.rb
def create
@message = Message.new(params[:message])
@box = Box.find(params[:box_id])
@message = @box.messages.build(params[:message])
@message.user = current_user
respond_to do |format|
if @message.save
flash[:notice] = 'Message was successfully created.'
format.html {redirect_to @box }
else
format.html { render :action => "new" }
format.xml { render :xml => @flash.errors, :status => :unprocessable_entity }
end
end
end
def new
@message = Message.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @message }
end
end
【问题讨论】:
标签: ruby-on-rails ruby error-handling