【问题标题】:Ruby on Rails - How to update using checkboxesRuby on Rails - 如何使用复选框进行更新
【发布时间】:2012-03-03 05:01:02
【问题描述】:

标题可能过于笼统,但希望有人能帮帮我。

场景如下: - 我有一个模型 Types、TypesActivity 和 Activity(关系是多对多的) - 创建类型(仅包含名称)后,我必须将活动分配给该类型,为了做到这一点,我在另一个视图(表单)中有 2 个部分: 1)使用类型的select_tag(显示名称) 2) 显示所有活动的复选框列表

我在表单视图中显示复选框

_form.html.erb

<% @activities.each do |a|%>
          <li><%= check_box_tag "act[]", a.id, false%> | <%= a.name%></li>
<%end%>

在我的控制器中

def create
  params[:act].each do |a|
    TypeActivity.create({:type_id => params[:resource][:type_id], :activity_id=>a})
  end

  redirect_to "somewhere"
end

一切正常,但我有一个问题...如何更新它?

这是正确的吗? (或者还有其他更好的方法吗?)

def update
   _v = TypeActivity.find(params[:id]).type_id
   params[:act] do |a|
      TypeActivity.update_attributes(:type_id=>_v,:activity_id=>a)
   end
end

另外,如果我想编辑一个 TypeActivity (type_activities/edit/3),我想显示已经被选中的复选框,并且我已经这样做了

def edit
   @t = TypeActivity.find(params[:id]).type_id
   @activities = Activity.all
end

在我看来

_form.html.erb

<% @activities.each do |a|%>
  <li><%= check_box_tag "act[]", a.id, !TypeActivity.where(:type_id=>@t,:activity_id=>a.id).empty?%> | <%= a.name%></li>
<%end%>

这是个好方法吗?

提前感谢所有阅读所有内容的人=)

哈维尔QQ

【问题讨论】:

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

如果type_activity 包含type_idactivity_id,那么最好不要创建TypeActivty 模型。

type_activity 视为链接表,并在TypeActivity 模型中配置has_and_belongs_to_many 关联。然后使用TypesController 管理将活动分配给类型。

阅读材料

Rails 关联指南:
http://guides.rubyonrails.org/association_basics.html#the-has_and_belongs_to_many-association

Railscast #17 - HABTM 复选框:
http://railscasts.com/episodes/17-habtm-checkboxes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    相关资源
    最近更新 更多