从Rails中的视图更新模型属性

时间:2013-11-21 03:27:18

标签: ruby-on-rails ruby view model controller

我的persons视图的编辑页面中有以下内容:

<%= form_for @person do |f| %>
    <%= label_tag :city %>
    <%= f.text_field :city %>
    <%= label_tag :state %>
    <%= f.text_field :state %>
    <%= label_tag :name %>
    <%= f.text_field :name %>
    <%= f.submit %>
<% end %>

我的想法是,我可以从此视图更新:city模型上的:state:name@person属性。

我的控制器需要做些什么来实现这一目标?我的路线正确通过,到目前为止我的控制器中有这个:

  def update
    @person = Person.find(params[:id])
    @person.update_attributes!(@person_params)
    redirect_to @person
  end

然而,这只是重新定向到我的@person的显示页面,而不是实际更新模型上的属性。我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

应该是这样的:

def update
  @person = Person.find(params[:id])
  respond_to do |format|
    if @peron.update_attributes(params[:person])
      format.html { redirect_to people_url, notice: "#{@person.name} was updated." }
    else
      format.html { render action: "edit" }
    end
  end
end

答案 1 :(得分:0)

您可以在控制器更新操作中执行类似的操作。

将Person属性作为强参数传递。 这是首选方法,因为建议使用强对数。

def update
    @person = Person.find(params[:id])
    @person.update(person_params)
    redirect_to @person
end

将其设为私有方法:

private

def person_params
    params.require(:person).permit(:city, :state, :name)
end