【问题标题】:setting a dynamic link_to rails设置动态 link_to rails
【发布时间】:2014-12-29 01:06:41
【问题描述】:

我对 Rails 很陌生,我想为某个页面动态设置我的链接。我有一个名为“未完成”的表,它有一个名为“链接”的列(从“链接”更正)我希望能够在视图中调用“链接”记录来设置我的 link_to 链接路径。

我正在尝试这样做......

<%= link_to @unfinished.link(:p => @post.id)  do %>  FINISH <% end %>

...但这不起作用。

我的控制器说:

def show

@post = Post.find(params[:id])

   @unfinished = Unfinished.where('progress = ?', @post.progress).last

end 

控制器逻辑工作正常...直到我尝试将@unfinished.link 放入link_to

编辑: 错误信息:

wrong number of arguments (1 for 0)

型号

  class Unfinished < ActiveRecord::Base
  end

链接的类型是:

step1_path
step2_path
step3_path

我正在制作一个多页表单,您可以在中途保存。根据@post.progress 列中的值(如 1、2、3),将提供完成帖子的正确路径(step1_path、step2_path 等...)

【问题讨论】:

  • 您收到什么错误信息?未完成的模型是什么样子的?你说它有一个链接列,你的链接方法在未完成时是什么样子的。请发布该代码..
  • 我不明白你所说的“未完成的链接方法”是什么意思......但我发布了其他所有内容。
  • 你有一个未完成的模型?你说它有一个名为链接的列。但是您正在调用一个名为link 的方法,并传入一个散列,其中:p 设置为post.id。您的未完成模型是否没有您定义的称为链接的方法?如果不是,那是问题的一部分,因为 ActiveRecord 将寻找 Unfinished#links 来访问该字段(它不使用列上的变形器)。
  • 它叫“链接”……一开始我写错了。它应该在寻找 Unfinished#link 并且列名是“link”。

标签: ruby-on-rails dynamic link-to


【解决方案1】:

试试这个。

<%= link_to eval(@unfinished.link.to_s)  do %>  FINISH <% end %>

因为你想要的链接实际上是一个命名路由,所以你需要评估它。

但是这样你将无法传递你需要的帖子 ID。

如果所有记录的路径都相同(除了基于进度属性的部分),您还需要将其存储在数据库中吗?您可以让链接方法返回路径(您仍然需要评估)。

类似

   def link (post) 
      "step#{self.progress}_path(post.id)"
   end

然后在返回的路上评估链接。但不确定这是否可行,只是大声思考......

有做多阶段形式的宝石也许研究它们可能会有所帮助?

【讨论】:

  • 谢谢。我将尝试将“def link”逻辑放在 PostController 中。我将如何在视图中编写那个?
  • 帖子与未完成有何关系?我注意到我的链接中有一个错误,因为进度与 post.progress 相关,而不是 unfinished.progress。你的视图中有一个帖子实例吗?
  • 还可以查看这个答案,它可能会有所帮助。 stackoverflow.com/questions/9596168/…
  • 如果 @Post.progress = 1 它与 Unfinished.progress 连接。 Unfinished.link 然后提供发布过程的第 2 步的链接。我想我必须做第一个选择......所以请不要麻烦自己回答我的评论。你完美地回答了我的问题。
猜你喜欢
  • 1970-01-01
  • 2012-08-16
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多