【问题标题】:Click pictures and update database row on rails单击图片并更新rails上的数据库行
【发布时间】:2013-03-08 00:59:26
【问题描述】:

我需要能够单击图像(从一堆图像中)并根据单击的图像更新配置文件表。

我视图中的图像列表:

 <% @pages_selection.each do |pages_selection| %>
    <img> 
      <%= link_to image_tag(pages_selection.page_picture, '#') %>
    </img>
 <% end %>

然后我的控制器中有一个方法,称为 save_new_scores_to_profile,它可以平均图片中的数据并更新配置文件值。

当我的 link_to(图片)被点击时,我如何调用我的控制器方法?有这样的东西吗?

if link_to clicked
   perform_controller_or_helper_method
end

因为用户需要选择多张图片,我希望他们在点击图片后留在页面上(这就是为什么我将链接指向“#”。如果页面末尾还有一个提交按钮这有帮助。

我愿意使用 link_to 以外的其他东西。

编辑:

这是我现在在路线中的位置

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

和视图:

<% @pages_selection.each do |pages_selection| %>
    <img> 
      <%= link_to image_tag(pages_selection.page_picture, :controller =>      
          :checked_average_with_profile, :action => :save_new_scores_to_profile, :image_id 
          => pages_selection.id) %>
    </img>
<% end %>

我的控制器中有函数 checked_average_with_profile 和 save_new_scores_to_profile 我知道它们可以工作(在使用辅助函数测试之后)。

【问题讨论】:

  • 您能否提供您的路线,以便我们提供更具体的答案?
  • 匹配 'quizzes/index', :to => 'quizzes#index' 和资源 :preferences 我需要在点击图片时重新路由回preferences_path
  • 如果我只是将 link_to 的路径部分留空,它会自动重定向回同一页面,这是完美的
  • 您需要在路由中添加save_new_scores_to_profile
  • 啊,这很关键。谢谢!

标签: ruby-on-rails ruby-on-rails-3 image helper link-to


【解决方案1】:
link_to image_tag(pages_selection.page_picture, :controller => :my_controller, :action => :save_new_scores_to_profile, :image_id => pages_selection.page_picture.id )

在 my_controller 中输入你的控制器的名称。 使用 :image_id 您已经传递了一个参数,您可以在控制器操作中使用 params 哈希引用该参数,例如:params[:image_id]

在该控制器操作中完成所有工作(或额外调用辅助方法), 找到具有该 image_id 的图片并重定向到 @picture_with_that_id

【讨论】:

  • 你能解释一下 :action 和 :controller 的作用吗?我已经阅读了很多关于它们的信息,但无法完全区分。我认为 :controller 已被更新版本的 Rails 替换(如果我错了请告诉我)。为什么 save 方法需要在 :action 中,而其他东西在 :controller 中?
  • 哦,还有 :image_id 部分真的很有帮助。我就是无法让 :controller 中调用的方法工作。
  • :controller、:action 和 :image_id 都是链接的一部分,它们将被生成并调用您的控制器。你必须在你的控制器中有一个名为 save_new_scores_to_profile 的动作(一个动作是一个控制器方法,看看你的控制器它可能有一些方法,比如'new','create','show','index')。这些都是控制器方法,也就是动作。然后在名为“save_new_scores_to_profile”的控制器方法的定义中,您必须将所有代码放入您想做的任何事情中,最后放入 redirect_to @picture_with_that_id 即可。
猜你喜欢
  • 1970-01-01
  • 2019-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 2015-02-21
相关资源
最近更新 更多