0

我的 link_to 看起来像这样:

<%= link_to image_tag(user_likes_selection.page_picture, :image_id =>     
user_likes_selection.id, :controller => :preferences_controller, 
:action => :checked_average_with_profile) %>

我的控制器preferences_controller 有一个名为checked_average_with_profile 的方法,据我所知,当我单击图像时不会调用该方法。

从 link_to 生成的 html 代码是

<img>
<a href="/preferences"><img action="checked_average_with_profile" alt="Soul_surfer_film"     
controller="preferences_controller" height="70%" image_id="3254" 
src="/assets/soul_surfer_film.jpg" width="70%" /></a>
</img>

为什么单击图像时不执行控制器代码?

4

5 回答 5

1

在这种情况下,如果您使用块形式,则更容易阅读代码link_to

<%= link_to { :image_id => user_likes_selection.id, :controller => :preferences, :action => :checked_average_with_profile } do %>
  <%= image_tag(user_likes_selection.page_picture %>
<% end %>

在您的路线中,您还可以传递一个as选项,以便您可以使用命名路线。假设您的路线看起来像

match '/preferences/checked_average_with_profile/:image_id' => 'preferences#checked_average_with_profile', as: :check_average_profile

您可以使用简化链接

link_to image_tag(user_likes_selection.page_picture), check_average_profile_path(user_likes_selection.id)
于 2013-03-08T07:59:35.187 回答
0

把你的paren放在后面user_likes_selection.id,而不是放在最后。您正在将图像标签属性与您的 link_to 属性混合。

尝试:

<%= link_to image_tag(user_likes_selection.page_picture, :image_id =>     
user_likes_selection.id), {:controller => :preferences, 
:action => :checked_average_with_profile} %>
于 2013-03-08T07:53:30.870 回答
0

这是我在代码中的操作方式。

<%=link_to(image_tag(user_likes_selection.page_picture), check_average_profile_path(user_likes_selection.id)) %>
于 2013-03-08T08:01:06.837 回答
0

尝试:

<%= link_to image_tag(user_likes_selection.page_picture), url_for({:controller => 'preferences_controller', :action => 'checked_average_with_profile', :image_id =>  user_likes_selection.id}) %>
于 2013-03-08T08:28:42.843 回答
-1

最后通过在资源中添加一个包含我的操作的集合来解决我的问题:

resources :preferences do
  collection do
    get 'save_new_scores_to_profile'
    get 'checked_average_with_profile'
  end
end

然后,我修改了视图代码,以便可以将 image_id 变量传递给控制器​​。

<%= link_to image_tag(user_likes_selection.page_picture,
    checked_average_with_profile_preferences_path(:image_id => 
    user_likes_selection.id) %>

在我的控制器中,我确保使用参数获取 image_id 并在最后放置一个 redirect_to:

def checked_average_with_profile
  params[:image_id]
  redirect_to preferences_url
end

如果您遇到此问题,关键部分是在您指定的控制器路径的括号内传递 id(无论可能是什么),并在路由文件中使用 COLLECTION 而不是 MEMBER。

于 2013-03-09T05:53:57.277 回答