0

我在 Rails 中构建了一个非常小的应用程序。这是一个简单的体重跟踪器应用程序。我创建了一个User具有注册页面的模型。一旦用户登录,他们就会被重定向到user#show视图。到目前为止,这是用户控制器:

class UsersController < ApplicationController
before_filter :authenticate_user!

def show
  @user = current_user
end

end

我有 2 个其他模型,一个是Weight模型,另一个是Goal模型,我想要它,所以当用户注册时,他们会看到一个屏幕,要求他们输入当前体重和目标体重,然后将这些信息存储在和模型分别WeightGoal登录的用户 ID 一起。

到目前为止,我已经能够向用户show.html.erb模板添加一个表单:

<%= form_for @user do |f| %>

  <%= f.fields_for :weight do |builder| %>
    <fieldset>
      <%= f.label :value, "Current weight" %><br />
      <%= f.text_field :value %><br />
    </fieldset>
  <% end %>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

它正确地呈现了表单,但是当我点击提交按钮时,它只是进入一个错误页面,说Unknown action- The action 'update' could not be found for UsersController. 我假设 iM 做错了什么,因为它应该尝试发送到创建操作。

有没有人可以帮助我回到正确的道路上,我非常喜欢rails。

4

3 回答 3

2

好吧,这与您的所有模型无关。这与您没有update在控制器中定义方法有关。

完成后,如果要嵌套模型,请查看Accepts_nested_attributes_for 。

除此之外,show页面通常显示对象的只读。edit页面具有对象的可编辑形式。

于 2013-02-26T20:03:05.553 回答
0

您正在使用form_forRails 帮助程序并传递@user给它,因为它@user是一个持久模型(保存在数据库中),那么生成的表单将具有/users/:idPUT方法的操作,因此请求将被发送到您的名为的操作updateUsersController看来您没有在你的UsersController

它应该类似于以下内容:

def update
  @user = Users.find(params[:id])
  if @user.update_attributes(params[:user])
  # do something if saving succeeds
  else
  # do something if saving fails
  end
end
于 2013-02-26T20:09:09.650 回答
0

我相信,在搜索了具有类似问题的这个问题之后,缺少的不是更新而是编辑。

我知道这是一个旧线程,您可能已经解决了这个问题,但如果没有尝试添加:

def edit

    @user = User.find(params[:id])

end
于 2014-09-03T21:54:07.440 回答