代码之家  ›  专栏  ›  技术社区  ›  dblarons

link_to image_tag中的控制器和操作不执行控制器代码

  •  0
  • dblarons  · 技术社区  · 11 年前

    我的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>
    

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

    5 回复  |  直到 11 年前
        1
  •  1
  •   jvnill    11 年前

    在这种情况下,如果使用的块形式,则更容易读取代码 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)
    
        2
  •  0
  •   Muhamamd Awais    11 年前

    以下是我在代码中的操作方法。

    <%=link_to(image_tag(user_likes_selection.page_picture), check_average_profile_path(user_likes_selection.id)) %>
    
        3
  •  0
  •   sjain    11 年前

    尝试:

    <%= 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}) %>
    
        4
  •  0
  •   Richard Brown    11 年前

    把你的爸爸放在后面 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} %>
    
        5
  •  -1
  •   dblarons    11 年前

    通过在资源中添加一个包含我的操作的集合,终于解决了我的问题:

    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) %>
    

    在我的控制器中,我确保用params获取image_id,并在末尾放一个redirect_to:

    def checked_average_with_profile
      params[:image_id]
      redirect_to preferences_url
    end
    

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