0

在本指南中:

http://guides.rubyonrails.org/v2.3.11/form_helpers.html#binding-a-form-to-an-object

在该部分2.2 Binding a Form to an Object中,我看到了这一点:

<% form_for :article, @article, :url => { :action => "create" }, :html => {:class => "nifty_form"} do |f| %>
  <%= f.text_field :title %>
  <%= f.text_area :body, :size => "60x12" %>
  <%= submit_tag "Create" %>
<% end %>

我得到这样的表格:

<form action="/articles/create" method="post" class="nifty_form">
  <input id="article_title" name="article[title]" size="30" type="text" />
  <textarea id="article_body" name="article[body]" cols="60" rows="12"></textarea>
  <input name="commit" type="submit" value="Create" />
</form>

所以控制器方法create应该被执行并且@action应该从表单序列化到它。那么我是否需要使用一些参数声明 create ,例如:

def create(action)
action.save!
end

或者我将如何获取从控制器方法 create 中的表单发送的操作对象

4

4 回答 4

1

所有表单值都作为散列传递给方法。该字段以 as 、as等title形式传递。params[:article][:title]bodyparams[:article][:body]

所以在你的控制器中,你需要Article从这些参数中创建一个新的。请注意,您不会将参数传递给该create方法:

def create
  @article = Article.new(params[:article])
  if @article.save
    redirect_to @article
  else
    render 'new'
  end
end
于 2013-07-08T13:06:37.993 回答
1

这里,@article是您的 Article 模型对象。

<form action="/articles/create" method="post" class="nifty_form">

这个表单的动作是"/articles/create",这意味着在提交表单时,所有的表单数据都将被发布以创建文章控制器的动作。在那里,您可以通过参数捕获表单数据。

所以在你的创建动作中

def create
    # it will create an object of Article and initializes the attribute for that object
  @article = Article.new(params[:article]) # params[:article] => {:title => 'your-title-on-form', :body => 'your body entered in your form'}

  if @article.save # if your article is being created
    # your code goes here 
  else
    # you can handle the error over here
  end
end
于 2013-07-08T13:10:53.340 回答
0

可以通过参数来实现。

def create
  @article = Article.new(params[:article])
  @article.save!  
  redirect_to :action => :index #or where ever 

rescue ActiveRecord::RecordInvalid => e
  flash[:error] = e.message
  render :action => :new
end
于 2013-07-09T04:41:33.507 回答
0

要让 create 方法保存您的对象,您只需将参数传递给新对象,然后保存它

def create
 Article.new(params[:article]).save
end

实际上,使用重定向 response_to 块等方法可能会更加困难......

于 2013-07-08T13:09:25.240 回答