【问题标题】:Rails: saving a user field from another controllerRails:从另一个控制器保存用户字段
【发布时间】:2015-08-04 21:44:50
【问题描述】:

组合:Rails4、Mongoid 我有一个管理控制台仪表板:/admin/moderator-slug/dashboard 列出所有用户,并带有一个按钮来管理该用户:

<%= link_to "Manage", { controller: 'admin', action: 'manage', user: user} %>

如您所见,我在参数中传递了该用户。 在我的管理控制器中,我的管理操作如下:

def manage
  @user = User.find(params[:user])
  if params[:follow_up].present?
    @user.follow_up = Date.strptime(params[:follow_up], "%m/%d/%Y")
  end
end

成功进入管理页面:/admin/moderator-slug/manage?user=managed-user-slug,并通过我通过按钮传递的参数找到@user。

在我的用户模型中,我创建了一个时间字段“follow_up”。

我想用 datepicker 选择的特定时间更新该字段,所以我创建了以下 form_tag:

<%= form_tag manage_path, method: "get", remote: true do %>
  Follow up: <%= text_field_tag "follow_up", nil, autocomplete: "off" %>
  <%= submit_tag "Create" %>
<% end %>

当我按下提交按钮时,我得到Mongoid::Errors::InvalidFind

当我传递隐藏字段 &lt;%= hidden_field_tag :user , @user %&gt; 时,我得到 404。此外,我感觉我的设置不是最健康的,因此传递该隐藏字段确实是一种可以避免的解决方法。

我的路线:

authenticate :user, -> (u) { u.is_moderator? } do
  match 'admin/:slug/dashboard',    to: 'admin/admin#dashboard',    via: 'get',   as: :dashboard
  match 'admin/:slug/manage',       to: 'admin/admin#manage',       via: 'get',   as: :manage
end

有什么建议吗?

【问题讨论】:

  • 请显示来自rake routes的输出。
  • "dashboard GET /admin/:slug/dashboard(.:format) admin/admin#dashboard" 和 "manage GET /admin/:slug/manage(.:format) admin/admin#manage "
  • 其实我主要是想看manage_path的URL快捷方式,请将所有包含manage_path的行添加到gist或者你的问题中
  • EugZol,manage_path 只在视图中和路由中出现一次。要点如下:gist.github.com/whoteaches/67c15a5cf783ce5c7fd3
  • 所以您使用相同的 URL (admin/:slug/manage) 来显示表单和更新字段?

标签: ruby-on-rails forms mongodb controller


【解决方案1】:

看起来您应该将用户 slug 添加到您的表单 URL:

<%= form_tag manage_path(user: @user), method: "get", remote: true do %>

【讨论】:

  • 谢谢,这就是我所缺少的。
猜你喜欢
  • 2011-08-11
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
  • 2015-09-07
相关资源
最近更新 更多