我有一个关于form_for和嵌套资源的两部分问题.假设我正在编写一个博客引擎,我想将评论与文章联系起来.我已经定义了一个嵌套资源,如下所示:
map.resources :articles do |articles|
articles.resources :comments
end
Run Code Online (Sandbox Code Playgroud)
评论表单位于文章的show.html.erb视图中,位于文章本身下方,例如:
<%= render :partial => "articles/article" %>
<% form_for([ :article, @comment]) do |f| %>
<%= f.text_area :text %>
<%= submit_tag "Submit" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误,"为nil调用id,这会错误等等".我也试过了
<% form_for @article, @comment do |f| %>
Run Code Online (Sandbox Code Playgroud)
哪个呈现正确但将f.text_area与文章的"文本"字段而不是注释相关联,并在该文本区域中显示了article.text属性的html.所以我似乎也有这个错误.我想要的是一个表单,其'submit'将在CommentsController上调用create action,在params中有一个article_id,例如对/ articles/1/comments的post请求.
我的问题的第二部分是,开始创建评论实例的最佳方法是什么?我正在ArticlesController的show动作中创建一个@comment,因此一个注释对象将在form_for帮助器的范围内.然后在CommentsController的create动作中,我使用从form_for传入的参数创建新的@comment.
谢谢!
使用HttpUrlConnection使用抢占式基本http身份验证的最佳方法是什么.(现在假设我不能使用HttpClient).
编辑澄清:我正在使用Base64编码在请求标头中正确设置un/pw.是否需要设置任何其他标志或属性,或者我是否为抢先式基本身份验证所需的所有请求设置基本身份验证头?
我们计划使用Google Analytics跟踪广告点击推介,通过Android电子市场推广到我们的应用程序.
根据Google文档,引荐来源代码是通过意图实现的,并由Google Analytics资源库自动记录.
这很好,但我们需要为我们自己的内部分析提取引用标记.该文档很少关于如何从初始启动意图中获取它的详细信息,以及有关如何在上线之前模拟它的说明.
有任何人对此有经验吗?
OOP原则(如果有的话)在动态类型环境中不适用或应用不同,而不是静态类型环境(例如Ruby vs C#)?这不是对静态与动态辩论的呼吁,而是我想看看是否存在适用于一方而非另一方适用于该范围的任何一方的公认原则,或者采用不同的方式.在"静态类型"OOP文献中,诸如"喜欢组合到继承"的短语是众所周知的.它们是否适用于动态方面?
例如,在动态类型环境中,似乎耦合的粒度不会超过方法的级别.换句话说,任何给定的函数调用只将调用者耦合到任何类可能满足的特定接口- 或者换句话说,任何像那个特定的鸭子那样嘎嘎叫的东西.
另一方面,在Java中,耦合的粒度可以与包一样高.一个特定的方法调用不仅与另一个类/接口建立契约,而且还将它耦合到该类/接口的package/jar/assembly中.
像这样的差异会产生不同的原则和模式吗?如果是这样,这些差异是否明确表达了?Ruby Pickaxe书中有一节向这个方向发展(Duck Typing/Classes Are Types),但我想知道是否还有其他内容.我知道Ruby中的设计模式,但还没有读过它.
编辑 - 有人认为Liskov在动态环境中并不像在静态环境中那样应用它,但我不禁想到它确实如此.一方面,没有与全班同学的高级合同.但是,不是所有对任何特定类别的调用构成一个隐含的契约,需要像Liskov所规定的那样由子类来满足吗?考虑以下."做一些酒吧"的电话会创建一个需要由子课程来处理的合同.这不是"将专门对象视为基类吗?"的情况:
class Bartender
def initialize(bar)
@bar = bar
end
def do_some_bar_stuff
@bar.open
@bar.tend
@bar.close
end
end
class Bar
def open
# open the doors, turn on the lights
end
def tend
# tend the bar
end
def close
#clean the bathrooms
end
end
class BoringSportsBar < Bar
def open
# turn on Golden Tee, fire …
Run Code Online (Sandbox Code Playgroud) oop design-patterns static-typing dynamic-typing static-language
假设我与附加条件有以下关联:
belongs_to :admin_user,
:class_name => 'User',
:foreign_key => :admin_user_id,
:conditions=> 'users.admin=TRUE' # or any variation with hash or array, {:admin => true}, etc.
Run Code Online (Sandbox Code Playgroud)
该API文档指出的是:在belongs_to的条件选项会:
指定关联对象必须满足的条件才能包含为WHERE SQL片段,例如authorized = 1.
但是输出在select上没有显示WHERE子句,并且在任何情况下我都希望在belongs_to上这样的条件会阻止在INSERT而不是SELECT上保持该关系的开始.这个选项似乎对belongs_to关联没有影响,除非我遗漏了什么.该选项在has_many上有意义,我只是看不出它如何适用于belongs_to.
编辑:进一步的研究表明,您确实可以坚持违反条件的关联,但在重新加载记录后您无法检索关联的记录.
在如此定义的类上:
class Widget < ActiveRecord::Base
belongs_to :big_bloop,
:class_name => "Bloop",
:foreign_key => :big_bloop_id,
:conditions => ["big_bloop = ?", true]
belongs_to :bloop, :conditions => ["big_bloop = ?", true]
end
Run Code Online (Sandbox Code Playgroud)
...从控制台我们看到:
>> bloop = Bloop.new
=> #<Bloop id: nil, name: nil, big_bloop: nil>
>> widget = …
Run Code Online (Sandbox Code Playgroud) 这是真的?
每个应用程序只能指定一个BroadcastReceiver类.如果您需要合并来自不同SDK的两个或更多BroadcastReceiver,您将需要创建自己的BroadcastReceiver类,该类将接收所有广播并为每种类型的广播调用适当的BroadcastReceivers.
http://code.google.com/apis/analytics/docs/mobile/android.html#google-play-tracking
在清单文档中没有提到这一点 <receiver/>
http://developer.android.com/guide/topics/manifest/receiver-element.html