在为连接表添加属性时,如何在has_many:through关联中使用ActiveRecord的accepts_nested_attributes_for帮助程序?
例如,假设我有一个团队模型:
class Team < ActiveRecord::Base
role = Role.find_by_name('player')
has_many :players,
:through => :interactions,
:source => :user,
:conditions => ["interactions.role_id = ?", role.id] do
class_eval do
define_method("<<") do |r|
Interaction.send(:with_scope, :create => {:role_id => role.id}) { self.concat r }
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
团队已经players完成了interactions,因为用户可以占据多个角色(玩家,经理等).
如何在连接表中添加属性的同时使用accepts_nested_attributes_for?
如果我有现有的团队记录team和现有的用户记录user,我可以这样做:
team.players << user
team.players.size
=> 1
Run Code Online (Sandbox Code Playgroud)
但是如果我用嵌套播放器创建一个新团队:
team = Team.create(:name => "New York Lions",
:players_attributes => [{:name => 'John Doe'}])
team.players.size
=> 0
Run Code Online (Sandbox Code Playgroud)
在最后一个示例中,创建了团队,用户和交互记录(团队确实让用户通过交互),但此处未设置interact.role_id属性.
我知道如何将项目添加到ComboBox,但无论如何都要为每个项目分配唯一的ID?我希望能够知道如果选择了哪个ID与每个项目相关联.谢谢!
我想要一个C#算法,在一个动态长度的字符串中重新排列字符.找不到一个,我知道必须有一个.
该算法必须重新排列元素以形成所有可能组合的新字符串.
例如,"cat"会产生以下结果:
cat cta tca tac act atc
有一个需要通过自定义http标头获取信息的四方派对应用程序,因此我编写了一个简单的测试应用程序,创建此标题,然后重定向到列出所有标题的页面.
生成标头的servlet片段是:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/plain");
response.setHeader("cust-header", "cust-val");
response.sendRedirect("header.jsp");
}
Run Code Online (Sandbox Code Playgroud)
另一方面,header.jsp的相关代码是:
<%
Enumeration enumeration = request.getHeaderNames();
while (enumeration.hasMoreElements()) {
String string = (String)enumeration.nextElement();
out.println("<font size = 6>" +string +": " + request.getHeader(string)+ "</font><br>");
}
%>
Run Code Online (Sandbox Code Playgroud)
这会显示以下标题:
Host: localhost:9082
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; es-ES; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://localhost:9082/HdrTest/login.jsp
Cookie: JSESSIONID=0000tubMmZOXDyuM4X9RmaYYTg4:-1
Run Code Online (Sandbox Code Playgroud)
好像从未插入自定义标头.我该如何解决?
谢谢
这无疑是一个新手问题,但我一直未能找到满意的答案.在为多对多关系创建链接表时,最好是创建唯一的id还是仅使用相应表的两个外键(复合键?).
以Northwind数据库的不同图表为例,我发现了两个"版本".即:带有fkProductID和fkOrderID的OrderDetails表以及添加了OrderDetailsID的版本.
有什么不同?(它还取决于数据库引擎吗?).SQL(或Linq)的优点/缺点是什么?
提前感谢您的解释.
汤姆
我有算法问题.我不知道如何解决它.也许有人可以帮助我?
我有对象.每个对象具有相同的功能.它可以在表格中说明:
Feature1 Feature2 Feature3 Feature4
Object1 1 0 1 1
Object2 0 0 0 1
Object3 0 1 1 1
Object4 0 1 0 0
Run Code Online (Sandbox Code Playgroud)
现在我想找到所有最小的对象子集.对于每个特征,每个子集应至少具有一个值"1".对于上表,结果是两个子集:{Object1,Object3}和{Object1,Object4}.我无法生成所有可能的子集,因为它可能需要太多时间.
这似乎与我几天前回答的问题非常相似,但解决方案现在还没有奏效.
我正在构建一个rails应用程序,我正在尝试使用button_to在不同的控制器中触发destroy.
我对按钮的代码是
<%= button_to "delete", :controller => :meals,
:action => 'destroy',
:recipe_id => recipe.id,
:method => :post >
当我点击删除按钮时,我得到一个'不匹配饭/ 3',这是当前的meal_id.
膳食控制器中的破坏看起来像这样
def destroy
@meal = Meal.where("current_user.id => ? AND recipe_id => ?", current_user.id, params[:recipe_id]).first
@meal.destroy
respond_to do |format|
format.html { redirect_to :controller => "user" , :action => "show" }
format.xml { head :ok }
end
end
似乎button_to完全忽略了:action并且请求show不存在且不应该存在.
我有下面的代码工作正常,直到我尝试添加该bool NetworkAvailable = true部分.现在我Method name expected在下面的第4行得到编译时异常.
void NetworkStatus_AvailabilityChanged(object sender, NetworkStatusChangedArgs e)
{
var networkAvailable = e.IsAvailable;
SetUpdateHUDConnectedMode d = new SetUpdateHUDConnectedMode(UpdateHUDConnectedMode(networkAvailable));
this.Invoke(d);
}
delegate void SetUpdateHUDConnectedMode(bool NetworkAvailable = true);
private void UpdateHUDConnectedMode(bool NetworkAvailable = true)
{
...
}
Run Code Online (Sandbox Code Playgroud)
不可否认,我是新手Delegates,Optional Parameters所以我会感激任何见解.谢谢.
我想要一个命令,它为我所在的分支发出被跟踪分支的名称.就像是:
$ git checkout --track -b topic origin/master
Branch topic set up to track remote branch master from origin.
Switched to a new branch 'topic'
$ git unknown-command
origin/master
Run Code Online (Sandbox Code Playgroud)
有这样的命令吗?
我使用以下脚本将记录插入我的数据库:
$sql = "INSERT INTO fotetweets VALUES('$tweetid','$dp', '', '$username','$tag', '$twittercontent', '$twittertimestamp', '')";
mysql_query($sql);
Run Code Online (Sandbox Code Playgroud)
但是,如果$twittercontent包含'char,我认为它会失败.正确?
如果是这样我怎么能正确处理它?