小编pez*_*ser的帖子

联结表(连接表)是否也可用于一对多关系?

根据定义,连接表(桥接表/链接表)用于多对多关系,如下所示:

CREATE TABLE Users
(
UserLogin varchar(50) PRIMARY KEY,
UserPassword varchar(50) NOT NULL,
UserName varchar(50) NOT NULL
)


CREATE TABLE Permissions
(
PermissionKey varchar(50) PRIMARY KEY,
PermissionDescription varchar(500) NOT NULL
)


--This is the junction table.
CREATE TABLE UserPermissions
(
UserLogin varchar(50) REFERENCES Users (UserLogin),
PermissionKey varchar(50) REFERENCES Permissions (PermissionKey),
PRIMARY KEY (UserLogin, PermissionKey)
)
Run Code Online (Sandbox Code Playgroud)

但是它也不能像一对多关系那样容易使用,就像在这个例子中一个用户与许多订单相关联:

(我不太了解数据库,所以如果我误解了某些内容,请纠正我.)

CREATE TABLE Users
(
UserLogin varchar(50) PRIMARY KEY,
UserPassword varchar(50) NOT NULL,
UserName varchar(50) NOT NULL
)


CREATE TABLE Orders
( …
Run Code Online (Sandbox Code Playgroud)

database many-to-many one-to-many junction-table

7
推荐指数
3
解决办法
6518
查看次数

你曾经在任何Ruby代码中使用过"类实例变量"吗?

我可以理解为什么你需要一个类变量来跟踪已经在该类中实例化的对象的总数.

我可以理解为什么你需要一个实例变量来存储该类中特定对象的属性.

但是类实例变量我似乎无法证明是正确的.

据我了解,它们就像类变量一样,除了它们对类变量的方式不可见.

似乎这种用途非常有限.还是我错了?有没有人在代码中找到了很好的类实例变量?或者你能举例说明这种细微差别有价值的情况吗?

ruby inheritance scope class instance-variables

7
推荐指数
1
解决办法
1161
查看次数

jquery load方法是否提供与Rails replace_html方法等效的ajax功能?

所述的jquery负载方法从远程文件加载HTML和它注入到DOM.例如,要将feeds.html文件加载到具有Feed标识的div中,您可以执行以下操作:

$("#feeds").load("feeds.html");
Run Code Online (Sandbox Code Playgroud)

这是使用Rails replace_html方法调用partial的替代方法,还是功能略有不同?

page.replace_html 'feeds', :partial => 'main/feeds',
    :locals => {:feed =>  @feed_data }
Run Code Online (Sandbox Code Playgroud)

[编辑]:正如Craig Stuntz所指出的,replace_html返回Javascript而不是HTML - 这有什么优势/劣势?它只是意味着您返回的片段具有更多功能,就像使用Javascript的网页比常规HTML页面更强大一样吗?还是有其他原因返回Javascript而不是HTML?

ajax jquery dom ruby-on-rails

6
推荐指数
1
解决办法
1704
查看次数

在Rails迁移中,是否可以指示新添加的列应该在表中的现有列之前还是之后?

假设我在Rails迁移中创建了一个表,指定省略ID列:

create_table :categories_posts, :id => false do |t|
  t.column :category_id, :integer, :null => false
  t.column :post_id, :integer, :null => false
end
Run Code Online (Sandbox Code Playgroud)

后来我决定将ID列添加为主键,因此我创建了一个新的迁移:

class ChangeCategoriesToRichJoin < ActiveRecord::Migration
  def self.up
    add_column :categories_posts, :id, :primary_key
  end

  def self.down
    remove_column :categories_posts, :id
  end
end
Run Code Online (Sandbox Code Playgroud)

但是当我迁移后查看表格时,它看起来像这样:

category_id
post_id
id
Run Code Online (Sandbox Code Playgroud)

id列位于表中的最后一个位置,而通常id列是第一个.

有没有办法更改ChangeCategoriesToRichJoin迁移以坚持在表中的category_id列之前创建的id列?

或者我是否需要删除表并在"创建表"定义中添加列?

migration ruby-on-rails

6
推荐指数
2
解决办法
3406
查看次数

何时在Rails视图中使用@以及何时使用符号?

  <% form_tag(:action=>'update', :id=>@album.id) do %>

  Title: <%= text_field(:album, :title)  %><br>
  Artist: <%= text_field(:album, :artist)  %><br>
  Genre: <%= text_field(:album, :genre)  %><br>
  Release Date: <%= datetime_select(:album, :release_date, :start_year=>1960) %><br>

  <%= submit_tag("Update") %>

  <% end %>
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我不得不在form_tag中说@ album.id但在text_field中我不得不说:专辑.我在我的观点中一直混淆这些,并且从不真正知道是否使用@符号或符号.是否有一个简单的规则可以明确说明什么时候使用?

symbols ruby-on-rails instance-variables presentation-layer

5
推荐指数
2
解决办法
6820
查看次数

为什么return关键字会导致我的'if block'出现问题?

以下代码工作正常:

person = {:a=>:A, :b=>:B, :c=>:C}
berson = {:a=>:A1, :b=>:B1, :c=>:C1}

kerson = person.merge(berson) do | key, oldv, newv |
if key == :a
  oldv
elsif key == :b
  newv
else
  key
end
end

puts kerson.inspect
Run Code Online (Sandbox Code Playgroud)

但是如果我return在"if block"里面添加,我会收到一个错误:

person = {:a=>:A, :b=>:B, :c=>:C}
berson = {:a=>:A1, :b=>:B1, :c=>:C1}

kerson = person.merge(berson) do | key, oldv, newv |
if key == :a
  return oldv
elsif key == :b
  return newv
else
  return key
end
end

puts kerson.inspect
Run Code Online (Sandbox Code Playgroud)

上面代码的错误是:

unexpected …
Run Code Online (Sandbox Code Playgroud)

ruby

5
推荐指数
1
解决办法
637
查看次数

为什么instance_eval()在类上调用时定义了一个类方法?

Foo = Class.new
Foo.instance_eval do
  def instance_bar
    "instance_bar"
  end
end
puts Foo.instance_bar       #=> "instance_bar"
puts Foo.new.instance_bar   #=> undefined method ‘instance_bar’
Run Code Online (Sandbox Code Playgroud)

我的理解是,在对象上调用instance_eval应该允许您为该对象定义实例变量或方法.

但是在上面的示例中,当您在类Foo上调用它来定义instance_bar方法时,instance_bar将成为可以使用"Foo.instance_bar"调用的类方法.很明显,这段代码没有创建实例方法,因为Foo.new.instance_bar导致"未定义的方法'instance_bar'".

为什么instance_eval在此上下文中定义类方法而不是实例方法?

ruby class-method instance-method

5
推荐指数
1
解决办法
1563
查看次数

你怎么能在Ruby中做一个安全的,向后兼容的"反向monkeypatch"?

如果您的同事"打开"("monkeypatches")Ruby中的一个类并重新定义了您需要使用的一些重要功能,那么如何在不破坏已经依赖于其monkeypatched定义的系统的情况下访问原始的monkeypatched功能?

ruby reverse monkeypatching

4
推荐指数
1
解决办法
403
查看次数

在Google App Engine上,如何在GQL中查找客户的最新订单?

如果我有两个表,客户和订单,并且我想查找客户的最新订单,我将如何使用GQL在Google App Engine上执行此操作?

通常,我会通过订单表中存在的外键customer_id加入这两个表.

select orders.* from customers, orders 
where customers.customer_id = orders.customer_id
and orders.order_id = (select top 1 sub_orders.order_id from orders sub_orders 
                where sub_orders.customer_id = orders.customer_id 
                order by sub_orders.order_date desc)
Run Code Online (Sandbox Code Playgroud)

但是,由于Google App Engine似乎无法进行加入,因此我不确定如何解决此限制.任何建议,将不胜感激.

google-app-engine join gql

4
推荐指数
1
解决办法
1080
查看次数

是否可以在Rails中使用"前端控制器"?

在Spring MVC中,Dispatcher servlet用作"前端控制器"来处理所有应用程序请求并适当地路由它们.

是否可以在Rails中使用这种方法,或者是否需要为每种类型的操作编写单独的控制器而不需要"交通警察"(前端控制器)指导流程?

ruby-on-rails dispatcher front-controller

3
推荐指数
1
解决办法
950
查看次数