2015-04-25 50 views
1

我想显示带图像的按钮。 我有这样的代码Rails button_to与图像和动作

<%= image_submit_tag "down.png", controller: "posts", action: "votedown", post_id: post.id, topic_id: post.topic_id, class: "xta" %> 

其可见正常,但没有打电话行动“votedown”

在我的路线我有

post '/votedown', to: 'posts#votedown 

请还建议,如果有任何其他的方式来调用方法voteedown与参数和图像“down.png”

回答

1

image_submit_tag must be used in conjunction with a form - 它只是一个正常的html <input type="submit">按钮。

您可能还需要改变你的路线定义为更宁静:

patch '/posts/:id/votedown' => "posts#votedown", as: 'votedown_post' 

这使得它更明显的是,这条路作用于后 - 我们使用PATCH方法,因为我们正在改变的资源而不是创建一个新的资源。

武装我们的新途径,我们可以简单地创建一个表单:

<%= form_for(@post, url: votedown_post_path(@post)) do |f| %> 
    <%= image_submit_tag "down.png", class: "xta" %> 
<% end %> 

请注意,您不需要添加一个输入的帖子ID,因为这将作为params[:id]

另一种方法是使用Rails unobstructive javascript驱动程序来创建一个链接或按钮,该链接或按钮将PATCH请求发送到'/posts/:id/votedown'

<%= link_to image_tag("down.png", class: "xta"), votedown_post_path(@post), method: :patch %> 
+0

我必须提交2个PARAMS到votedown方法帖子ID和主题ID上面的代码是只提交帖子ID – Adt

+1

如果重写的路线,我建议你可以从'PARAMS的帖子ID [:ID] '。另外,除非帖子是嵌套在主题中的资源,否则您不需要传递'topic_id'。在这种情况下,你会希望你的路线读取'/ topics /:topic_id/posts /:id'。如果你坚持做错了,你会将这些字段添加到表单中。 – max