【问题标题】:how is collection_select processed in the controller?collection_select 在控制器中是如何处理的?
【发布时间】:2012-09-22 06:19:50
【问题描述】:

我使用 collection_select 创建了一个下拉列表

<%= collection_select(:page, :user_id, @users, :id, :full_name) %>

那部分工作正常。我在使用控制器保存/处理它时遇到了麻烦,APIdock 在这方面不是很有帮助,而且我无法找到我发现的一个示例。谁能向我解释如何在控制器中处理选定的值?

【问题讨论】:

    标签: ruby-on-rails select collections drop-down-menu process


    【解决方案1】:

    你会有价值

    params[:page][:user_id]
    

    这将对应于表单中选择的值。你可以看到它检查params 变量。

    IT 是一个数字,即所选用户的 ID。您可以通过

    加载用户
    @user = User.find(params[:page][:user_id])
    

    但是没用。事实上,如果页面的user_id属性是可以访问的,那么用通常的方式

    @page.update_attributes(params[:page]) # in the update action
    

    @page.create(params[:page]) # in the create action
    

    您将在页面中获取用户为@page.user

    【讨论】:

    • 我将如何使用它来查找预先存在的对象?我试过@user = params[:page][:user_id] 然后@page = Page.find(@user) 以及@page = params[:page][:user_id] 然后@user = User.find( @user) 但它们不起作用,它们没有抛出任何错误,但同时它们不返回任何值。
    • 请张贴“select”标签的开头部分(查看名称),并检查控制器开头的params(“pp params”,检查rails控制台输出,它是一个哈希)。
    • 那是生成的html代码,我假设这就是你的意思通过选择标签,至于检查参数,我尝试使用 params[:page][:user_id].inspect 并且没有用
    【解决方案2】:

    将页面值存储在模型中,该模型应在 user.rb 中指定“has_many :pages”。

    @user = User.find(params[:user_id])
    @user.pages = params[:page]
    

    params[:page] 返回将存储在当前模型记录中的值数组。

    【讨论】:

    • 谢谢,您将如何修改它以便能够修改现有记录而不是创建新记录?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 2020-02-12
    相关资源
    最近更新 更多