单个form_for如何为新的,更新和编辑工作?

Bla*_*man 14 ruby-on-rails

在rails 3中,是否可以创建一个适用于新的,更新和编辑操作的form_for?

如果是,我该怎么做?

我有一个管理部分,所以我的网址看起来像:

/admin/posts/ {new,update, edit}
Run Code Online (Sandbox Code Playgroud)

jam*_*mes 29

只是form_for处理它:

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for-label-Resource-oriented+style

控制器:

class ControllerName
  def new
    @post = Post.new
  end
  def edit
    @post = Post.find params[:id]
  end
end
Run Code Online (Sandbox Code Playgroud)

视图:

<%= form_for [:admin, @post] do |f| %>
<% end %>
Run Code Online (Sandbox Code Playgroud)


Rab*_*ott 19

因为需要发送新的创建和编辑需要发送以更新单个form_for将无法工作..除非(我不一定建议)你在form_form参数中放置一个三级运算符

form_for(@post, :url => (@post.new_record? ? admin_posts_url : admin_post_url(@post)))
Run Code Online (Sandbox Code Playgroud)

因为在你的新动作中你将拥有Post.new,它创建一个具有nil id的对象,并且在你的编辑动作中你将拥有Post.find(params [:id])

  • 而不是`@ post.id.nil?`,我更喜欢`@ post.new_record?` (10认同)