我创建了两个模型Restaurant
和menu
,以及餐厅has_many菜单。
我通过输入
rails g model Menu name restaurant:references
但我发现我无法按类型Menu.create(name: "test1")
m1 = Menu.create(name: "test1")
(0.2ms) BEGIN
(0.2ms) ROLLBACK
=> #<Menu id: nil, name: "test1", restaurant_id: nil, created_at: nil, updated_at: nil>
然后我检查了migration
和schema
,在Rails5迁移中,references
变成了这个
#Menu migration
...
t.references :restaurant, foreign_key: true
我认为在Rails4中,它会像
一样t.references :restaurant, index: true
这是我无法创造meun的原因吗?
这是迁移文件
class CreateMenus < ActiveRecord::Migration[5.0]
def change
create_table :menus do |t|
t.string :name
t.references :restaurant, foreign_key: true
t.timestamps
end
end
end
答案 0 :(得分:1)
您无法创建菜单,因为您的迁移包含restaurant_id
上的外键约束,这意味着无法在没有餐厅的情况下创建菜单(类似地,如果存在关联菜单,则无法销毁餐厅) 。如果这是您的意图,则您需要在创建菜单时提供有效的restaurant_id
,或者通过restaurant
@restaurant.menus.create(name: 'test1')
:foreign_key
如果您不需要外键约束,请修改迁移并删除:index
选项。如果这样做,请将 if (counter_1 == count)
{
left += 300;
top = 50;
count = count + 25;
}
List<Button> buttons = new List<Button>();
Button newButton = new Button();
buttons.Add(newButton);
this.Controls.Add(newButton);
newButton.Left = left;
newButton.Top = top;
TextBox newtextbox = new TextBox();
Controls.Add(newtextbox);
if (counter_1 == 100)
{
button1.Enabled = false;
}
newtextbox.Left = left + 100;
newtextbox.Name = "text" + counter_1;
// TextWriter tsw = new StreamWriter(@"d:\test.txt", true);
//tsw.WriteLine(newtextbox.Text);
// tsw.Close();
newtextbox.Top = top;
top += newButton.Height + 2;
newButton.Text = "position" + counter_1;
textBox1.Text = newtextbox.Name;
}
private void Save_Click(object sender, EventArgs e)
{
foreach (Control item in Controls)
{
if (item.GetType() == typeof(TextBox))
{
savetext[counter_1] = item.Text.ToString();
}
System.IO.File.WriteAllText("d:\\test.txt", savetext.ToString());
}
}
选项设置为true。