Rails:找不到具有' id' =模态对话框的用户

时间:2017-03-17 10:15:37

标签: ruby-on-rails modal-dialog

我想知道是否有人可以为我阐明这一点:

我有一个用户索引页面加载正常。

def index
    @users = User.paginate(page: params[:page])
end
视图中的

<tbody>
    <% @users.each do |user| %>
    <tr>
    <td>
     <input type="checkbox" class="checkthis" />
    </td>
    <td id="hidden">
     <%= user.id %>
    </td>
    <td class="ellipsis">
     <%= link_to user.name, edit_user_path(user) %>
    </td>
    <td id="hidden">
     <%= user.projects.count %>
    </td>
    <td>
     <%= user.admin? %>
    </td>
...clipped for brevity

用户名再次链接到编辑用户页面,这一切都很好......

我想要做的是在索引页面上的模态中使用编辑用户功能,而不是在单独的编辑页面上。我可以在索引页面上打开一个模态没问题,js工作正常。

问题是,当我将form_for @user(已经在我的编辑页面上工作)加载到模态中时,我收到错误

Couldn't find User with 'id'=

它引用了我在用户控制器中的第二行,我从编辑页面添加了索引。

 def index
    @users = User.paginate(page: params[:page])
    @user = User.find(params[:id])
 end

我的猜测是,这是因为索引页面没有选择用户加载,即@user变量没有id引用...这个假设是否正确?

我的表格部分在

之下
<%= form_for(@user) do |f| %>
<%= render 'shared/error_messages', object: @user %>

<%= f.label :name %>
<%= f.text_field :name, class: 'form-control' %>

<%= f.label :email %>
<%= f.email_field :email, class: 'form-control' %>

<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>

<%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation, class: 'form-control' %>

<%= f.submit yield(:button_text), class: "btn btn-success btn-lg" %>
<% end %>

如果是这样,我如何才能加载我的模态,以便它可以链接到用户索引,就像当前页面的工作方式一样,而不会出现ID问题。

显然,如果我误读了这个,还有另一个原因......我全是耳朵

谢谢

4 个答案:

答案 0 :(得分:2)

是的,你失踪的参数[:id]是你的问题。

要解决这个问题,你可以找到&#34;像这样的用户

@user = User.where(:id => params[:id]).first||User.new

或更好,如@iceman所述:

@user = User.where(:id => params[:id]).first_or_initialize 

@user将是&#34; new&#34;如果没有给出身份证明

答案 1 :(得分:0)

  

找不到'id'=

的用户

这意味着params[:id]nil

idparams操作更改索引操作

index未获得def index @users = User.paginate(page: params[:page]) end
exports.helloHttp = function helloHttp (req, res) {
  res.send(`Hello ${req.body.name || 'World'}!`);
};

答案 2 :(得分:0)

问题是你没有在params中发送用户ID,所以它找不到任何用户。如果要在索引上使用@user:id,则必须将/users param发送到索引视图。 默认索引路径看起来像

/users/:id/edit

,默认编辑路径类似于

find

find_by方法无法找到给定对象时,它也会出现错误。要收到nill而不是找不到错误,您可以使用where().first<p class="demo1"> some examples some examples <a href="https://jsfiddle.net/">anchor1</a> some examples some examples <a href="">anchor1</a>some examples some examples some examples some examples <a href="">anchor1</a>some examples some examples </p> <div id="demo2">hi</div> $('.demo2 a').hover(function (event) { link = $(event.target); //to find the nearest link and store in the link variable $("#demo2").text(link); });

答案 3 :(得分:0)

编辑功能中缺少

params [:id]。

你是否在模态中使用js获取了编辑页面html?如果是,那么

在控制器中添加以下代码:

def index
  @user = User.where(:id => params[:id]).first || User.new
end