class Agents << ActiveRecord::Base
belongs_to :customer
belongs_to :house
end
class Customer << ActiveRecord::Base
has_many :agents
has_many :houses, through: :agents
end
class House << ActiveRecord::Base
has_many :agents
has_many :customers, through: :agents
end
Run Code Online (Sandbox Code Playgroud)
如何添加Agents模型Customer?
这是最好的方法吗?
Customer.find(1).agents.create(customer_id: 1, house_id: 1)
Run Code Online (Sandbox Code Playgroud)
以上工作正常从控制台,但我不知道如何在实际应用程序中实现这一点.
想象一下,为客户填写的表格也house_id作为输入.然后在我的控制器中执行以下操作?
def create
@customer = Customer.new(params[:customer])
@customer.agents.create(customer_id: @customer.id, house_id: params[:house_id])
@customer.save
end
Run Code Online (Sandbox Code Playgroud)
总的来说,我对如何在has_many :through表中添加记录感到困惑?
我可以轻松地将一个元素添加到现有数组中:
arr = [1]
arr << 2
# => [1, 2]
Run Code Online (Sandbox Code Playgroud)
如何将多个元素添加到我的数组?
我想做类似的事情arr << [2, 3],但这会为我的数组添加一个数组#=> [1, [2, 3]]
我需要确保在创建产品时它至少有一个类别.我可以使用自定义验证类来完成此操作,但我希望有一种更标准的方法.
class Product < ActiveRecord::Base
has_many :product_categories
has_many :categories, :through => :product_categories #must have at least 1
end
class Category < ActiveRecord::Base
has_many :product_categories
has_many :products, :through => :product_categories
end
class ProductCategory < ActiveRecord::Base
belongs_to :product
belongs_to :category
end
Run Code Online (Sandbox Code Playgroud) 我期待编写一个范围,返回所有没有特定关联的记录.
foo.rb
class Foo < ActiveRecord::Base
has_many :bars
end
Run Code Online (Sandbox Code Playgroud)
bar.rb
class Bar < ActiveRecord::Base
belongs_to :foo
end
Run Code Online (Sandbox Code Playgroud)
我希望有一个范围,可以找到所有的Foo's那不要有任何bars.很容易找到使用关联的那些joins,但我还没有找到相反的方法.
我正在尝试为注册#new添加一些额外的字段.由于我只需要额外的数据并且不需要不同的功能,我不明白为什么我需要覆盖控制器等.所以我做的是修改注册#new如下:

要通过清理程序启用这些额外字段,我更新了ApplicationController,如下所示:

由于某种原因,它不起作用,额外的字段作为空值进入数据库.
我正在使用Ruby 2和Rails 4 rc1,以及Devise 3.0.0.rc.
我正在尝试设置配置文件控制器以与设计注册成员一起工作.
我已经创建了Profile模型和控制器,并one-to-one relationship通过添加belongs_to :member到我的profile.rb模型和has_one :profile我的member.rb模型中添加了一个.
要创建我使用的嵌套资源:
devise_for :members, :path => "accounts",:path_names => { :sign_in => "login", :sign_out => "logout", :sign_up => "register" }
resources :members do
resources :profiles
end
Run Code Online (Sandbox Code Playgroud)
呼叫rake routes输出
member_profiles GET /members/:member_id/profiles(.:format) {:action=>"index", :controller=>"profiles"}
POST /members/:member_id/profiles(.:format) {:action=>"create", :controller=>"profiles"}
new_member_profile GET /members/:member_id/profiles/new(.:format) {:action=>"new", :controller=>"profiles"}
edit_member_profile GET /members/:member_id/profiles/:id/edit(.:format) {:action=>"edit", :controller=>"profiles"}
member_profile GET /members/:member_id/profiles/:id(.:format) {:action=>"show", :controller=>"profiles"}
PUT /members/:member_id/profiles/:id(.:format) {:action=>"update", :controller=>"profiles"}
DELETE /members/:member_id/profiles/:id(.:format) {:action=>"destroy", :controller=>"profiles"}
Run Code Online (Sandbox Code Playgroud)
要localhost:3000/members/1/profiles在浏览器中正确的路线我的 …
我们正在为我们的会员使用设计.我们在成员模式中添加了一个tos_agreement字段(boolean),并将其添加到views/devise/registrations/new.html.haml.
在Member模型中,我们有一个验证规则如下:
validates_acceptance_of :tos_agreement, :allow_nil => false,
:accept => true
Run Code Online (Sandbox Code Playgroud)
它工作正常 - 如果你不接受服务条款,你不能注册.
但是,编辑设置时会出现问题.如果你去,/members/edit你会得到一个表格,你可以在那里更改你的电子邮件地址或密码.TOS协议没有任何字段,因为此时不应更改.但是,当您进行更改(例如更改密码)并提交表单时,它会返回错误消息,表明TOS协议不能为false.
我们如何告诉它在首次注册后永远不会尝试修改TOS协议?
编辑:所以我认为根本问题是我们在attr_accessible中有:tos_agreement,这是一个非常糟糕的想法,现在我想起来了.但是如果我们删除它,我们如何修改Devise以接受参数并对其执行某些操作,即使它不是可批量分配的?
validation ruby-on-rails devise ruby-on-rails-3 ruby-on-rails-3.2
我有一个jQuery函数,在列表项双击后调用.
应用程序/资产/ Java脚本/瓦/ tile.js
$('#list > li').dblclick(function(){
// styling
$(this).toggleClass('liked');
// pass ID to controller
var movie_id = $(this).attr("data-id");
$.getScript("/likes.js");
});
Run Code Online (Sandbox Code Playgroud)
在将一些新格式应用于所述项目之后,我的主要目标是从我的like控制器创建数据库条目.在这个Railscast中,index来自comments控制器的动作通过这个简单的行被调用.
$.getScript("/comments.js");
Run Code Online (Sandbox Code Playgroud)
另外,一些JavaScript从index.js.erb文件中调用.
理解Railscasts示例代码的第一个问题是它们如何定义动作.如果我想createLike从我的电话中调出这个动作likes_controller怎么称呼它?
其次,到目前为止我的尝试都失败了,因为JavaScript文件都没有加载,并且动作也没有被调用.
不知何故,我感觉到我已经搞砸了路径.我应该在哪里找到应该使用该getScript函数调用的JavaScript文件?
应用程序/资产/ JavaScript的/喜欢/ index.js.erb的
console.log("Test");
Run Code Online (Sandbox Code Playgroud)
应用程序/控制器/ likes_controller.rb
class LikesController < ApplicationController
protect_from_forgery
def index
Like.create(:user_id => current_user.id, :item_id => params[:id])
end
end
Run Code Online (Sandbox Code Playgroud) 经过一些研究,我能够根据我的image_class专栏添加样式.
Model.rb
has_attached_file :image,
:styles => lambda { |attachment| attachment.instance.decide_styles }
def decide_styles
styles = {}
case self.image_class
when "poster"
styles[:thumb] = ["30x45!", :jpg]
styles[:standard] = ["185x278!", :jpg]
styles[:expanded] = ["372x559!", :jpg]
styles[:big] = ["600x900!", :jpg]
when "cover"
styles[:thumb] = ["30x45!", :jpg]
styles[:standard] = ["300x1200!", :jpg]
end
styles
end
Run Code Online (Sandbox Code Playgroud)
这很顺利,现在我也想添加条件convert_options.这种方式失败了.
has_attached_file :image,
:styles => lambda { |attachment| attachment.instance.decide_styles },
:convert_options => lambda { |attachment| attachment.instance.decide_convert_options }
def decide_styles
...
end
def decide_convert_options
opshunz = …Run Code Online (Sandbox Code Playgroud) 我已经尝试过select2-rails gem的文档,但是我的浏览器控制台仍然会抛出错误.
未捕获的TypeError:$(...).select2不是函数
我正在使用rails 4.0.1&select2-rails 3.5.9.3
我的application.js
//= require jquery
//= require select2
//= require jquery.ui.accordion
//= require jquery.ui.menu
//= require jquery.ui.datepicker
//= require common
//= require posts
//= require twitter/bootstrap
//= require owl.carousel
//= require turbolinks
//= require vendor_js
//= require_tree .
$(document).ready(function() {
$("select#team_select").select2();
});
Run Code Online (Sandbox Code Playgroud)
application.css
*= require select2
*= require_self
*= require jquery.ui.accordion
*= require jquery.ui.menu
*= require jquery.ui.datepicker
*= require common
*= require owl.carousel
*= require lazybox
*= require fancybox …Run Code Online (Sandbox Code Playgroud) devise ×3
ruby ×2
validation ×2
activerecord ×1
arrays ×1
associations ×1
getscript ×1
javascript ×1
jquery ×1
paperclip ×1
scopes ×1
sql ×1