【问题标题】:Possible to add a form into another models view in rails可以将表单添加到 rails 中的另一个模型视图
【发布时间】:2013-02-26 19:53:03
【问题描述】:

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

class UsersController < ApplicationController
before_filter :authenticate_user!

def show
  @user = current_user
end

end

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

到目前为止,我已经能够向用户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。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3.2


    【解决方案1】:

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

    如果您想嵌套模型,请查看 accepts_nested_attributes_for

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

    【讨论】:

    • 创建另一个控制器(例如仪表板)并使用索引操作来创建此表单会更好吗?我基本上是尽量减少它。
    • 在那种情况下(以及几乎任何其他情况):想想 1 页,1 个模型。
    • 非常感谢伤害,非常感谢。
    【解决方案2】:

    您正在使用form_for Rails 助手并将@user 传递给它,因为@user 是一个持久模型(保存在数据库中),那么生成的表单将具有/users/:idPUT 的操作方法,因此请求将被发送到您的UsersController 中名为update 的操作,您的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
    

    【讨论】:

    • 哦,对了,我明白了,最好将体重和目标值插入各自的表格中?
    • 我刚刚添加了该代码并收到以下错误:{"utf8"=&gt;"✓", "_method"=&gt;"put", "authenticity_token"=&gt;"ciFbrD782Q+fS9h8gSZxHD2fEBlWoTVFTT2asHhcpPQ=", "user"=&gt;{"weight"=&gt;{"value"=&gt;"1.5"}}, "commit"=&gt;"Update User", "id"=&gt;"1"} 它似乎试图将权重模型的值内容保存到用户表中。我怎么做才能保存到自己的表中。
    • 正如@Khaled 所说,您创建一个实例变量@user 以保存到用户表。可以对其他人做同样的事情,重量,目标等。我会使用自定义哈希来代替,即@weight.update_attributes({:value1 =&gt; params[:user][:value1],:value2 =&gt; params[:user][:value2]})
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 1970-01-01
      • 1970-01-01
      • 2019-12-21
      • 1970-01-01
      • 2020-11-13
      • 1970-01-01
      相关资源
      最近更新 更多