Ruby On Rails更新失败了

时间:2016-01-26 21:00:11

标签: ruby-on-rails ruby ruby-on-rails-4

我尝试了很多但仍然失败了,我想在这里实现编辑和更新操作。 以下是我的代码

家庭控制器:

class HomeController < ApplicationController
  def index
    @inputs = Person.all
  end

  def new
    @input = Person.new
  end

  def create
    @input = Person.new(input_params)
    respond_to do |x|
    if @input.save
        x.html {redirect_to :action => 'index'}
    else
        x.html {render :action => 'new'}
    end
   end
  end

  def show
    @input = Person.find(params[:id])
  end

  def edit
    @input = Person.find(params[:id])
  end

  def update
    @input = Person.find(params[:id])
    respond_to do |x|
      if @input.update(input_params)
        x.html {redirect_to :action => 'index'}
      else
        x.html {render :edit}
      end
    end
  end

  private

  def input_params
    params.require(:inputs).permit(:name, :weight, :height, :color, :age)
  end
end

edit.html.erb

<h1>Editing Data</h1>
<%= render 'form' %>
<%= link_to 'Show', home_path %> |
<%= link_to 'Back', home_index_path %>

form.html.erb:

<%= form_for :@input do |person| %>
  <div class="field">
    <%= person.label :name %><br>
    <%= person.text_field :name %>
  </div>
  <div class="field">
    <%= person.label :weight %><br>
    <%= person.number_field :weight %>
  </div>
  <div class="field">
    <%= person.label :height %><br>
    <%= person.number_field :height %>
  </div>
  <div class="field">
    <%= person.label :color %><br>
    <%= person.text_field :color %>
  </div>
  <div class="field">
    <%= person.label :age %><br>
    <%= person.number_field :age %>
  </div>
  <div class="actions">
    <%= person.submit %>
  </div>
<% end %>

路线是正确的,我可以引导我进入编辑页面,但是,它显示, first problem, edit with no data pops up

新更新

Second problem, when click on button, directly go to this page

2 个答案:

答案 0 :(得分:0)

您似乎没有将表单绑定到您的方法。

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

给出了概述,但我建议您进行编辑:

<%= form_for @input do |f| %>
  <%= render 'form', f: f %>
  <%= f.submit "Update" %>
<% end %>

和你的部分 - 应该是_form.html.erb

<div class="field">
<p><label for = "input_name">Name</label>:
 <%= f.text_field :name %>
</div>

等。现在假设您已正确设置路线,它将返回到您的更新方法。如果您以rails期望的方式设置您的路线,那么您应该使用:

<%= form_for @article, url: **your_update_path** do |f| %>

在运行rake路由时,只需添加指向更新方法的路径路径。

答案 1 :(得分:0)

您应该使用form_for代替form_tag

<%= form_for @input do |x| %>
...

然后(取决于@input实际上是什么!)

<%= x.text_field :age %>