【问题标题】:Sending params to the new method将参数发送到新方法
【发布时间】:2015-03-19 00:01:40
【问题描述】:

我想覆盖控制器中默认的new 方法以接收一些参数。最好的方法是什么?像这样更改路由并为方法添加参数?

get 'article/:id/new', to: 'articles#new', as: :new_article

在控制器中:

def new(master)
  @article = current_user.articles.new(master)
end

有没有更好的方法来做到这一点?我让它工作的唯一方法是在表单中使用隐藏字段,这根本不理想。

【问题讨论】:

  • 如果路由已经是 RESTful 路由(例如 resources :articles),则无需更改路由,您只需将 new 方法/操作添加到控制器即可只是工作。但是 - 我不清楚您为什么需要将 master 作为参数传递给操作?你能把它从参数中拉出来吗?
  • 我正在改变路线的运作方式。我想在构建new 时加载一个master 资源以填满表单。
  • 这不是行动的运作方式。他们不直接接受论点。它们通过 params 哈希获取参数 - 所以您不妨使用现有的新操作

标签: ruby-on-rails ruby-on-rails-4 routing


【解决方案1】:

您有链接到您的new 操作的表单吗?那里坏了,应该只是一个链接。

只需将参数添加到链接中:

link_to "New Article", new_article_path( some_param: "some_value" )

然后在控制器中:

def new
  @article = current_user.articles.new some_param: params[:some_param]
end

【讨论】:

  • 连续两个。谢谢!
  • 抱歉,我看到了你的评论,刚刚将我的电话更新为new - 你是对的,我忘记了params[:some_param] 只是一个值,而不是一个哈希值。你现在可以看到我在前面添加了some_param:,所以总体上一个哈希值被传递到new
  • 完全辐射。对在newcreate 之间存储:some_param 有任何想法吗? (如前所述,不想让我很棒的 hidden_field 想法持续太久......)
  • 在新的session[:some_param] = params[:some_param],在创建got_it_back = session[:some_param]
  • 是的,很酷,我在想session 就可以了。感谢您的所有帮助。
猜你喜欢
  • 2017-06-24
  • 2021-10-01
  • 2023-03-13
  • 2020-04-26
  • 2017-12-13
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多