Chr*_*len 9 activerecord join ruby-on-rails
我正在尝试通过按钮的操作在连接表中创建记录.我会有一个事件模型,并希望跟踪每个用户的选定事件.
我使用HABTM关系,因为我不需要任何额外的字段.
User.rb:
has_to_and_belongs_to_many :events
Run Code Online (Sandbox Code Playgroud)
Event.rb:
has_to_and_belongs_to_many :users
Run Code Online (Sandbox Code Playgroud)
Events_Users迁移:
[user_id, event_id, id=>false]
Run Code Online (Sandbox Code Playgroud)
我对实际创建的记录感到困惑.有人在早些时候帮助我在控制台中添加记录:
u = User.find(1)
u.events << Event.find(1)
Run Code Online (Sandbox Code Playgroud)
现在我想通过点击链接来执行操作......这是正确的方向吗?
def add
@user = User.find(session[:user_id])
@event = Event.find(params[:id])
if @user.events.save(params[:user][:event])
flash[:notice] = 'Event was saved.'
end
end
Run Code Online (Sandbox Code Playgroud)
我应该添加一个@user.events.new地方,如果是这样,我在哪里放哪个用户和哪个事件的参数?
Gde*_*lin 14
以下代码应该有效(假设您传入一个名称为id的参数,该参数对应于事件对象的id):
def add
@user = User.find(session[:user_id])
@event = Event.find(params[:id])
@user.events << @event
flash[:notice] = 'Event was saved.'
end
Run Code Online (Sandbox Code Playgroud)
我在你的代码中看到的问题是:
您正在将哈希传递给.save.Save应该只取一个布尔值,对应是否应该运行验证,默认情况下为true.但是.create和.new可以接受值的哈希值.(.save将在.new之后使用).
您通过params [:id]加载事件,但之后您尝试通过params [:user] [:event]创建事件.你想做什么?创建还是加载?(我的例子假设加载)
当用户单击按钮并提交表单而不是"单击链接"时,应该发生具有此效果的操作.此代码可能容易受到跨站点请求伪造(有人可能会欺骗某人点击运行此操作的另一个站点上的链接).如果正确实现,Rails表单会受到保护,因为它们使用请求伪造保护令牌.
您很可能希望在此操作后重定向用户.在执行这样的操作(而不是重定向)之后渲染页面被认为是不好的做法.
| 归档时间: |
|
| 查看次数: |
12760 次 |
| 最近记录: |