我最近开始作为Web开发人员工作.我使用ASP .NET MVC 4和NHibernate.
在我的工作场所,我们严格使用视图模型在控制器和视图之间来回传输数据.并且视图模型不应包含模型的任何对象.我知道它是控制器和视图之间的一种层.
但是我发现编写一个viewmodel类是重复和冗余的,即使我们可以直接将模型的对象发送到视图(在大多数情况下).
例如,如果我想显示订单,我可以在控制器的操作中执行此操作 -
return View(Repository.Get<Order>(id));
Run Code Online (Sandbox Code Playgroud)
但相反,我必须编写一个viewmodel,用获取的顺序填充它,然后将其传递给视图.
所以,我的问题是,当我们可以使用模型的对象时,编写视图模型的目的是什么?
网站中使用的图像存储在此处(在图像文件夹中) -

图像以这种方式引用 -
<img src="@Url.Content("/Images/greenDot.png")" style="margin-right: 10px;"/>
Run Code Online (Sandbox Code Playgroud)
当我在本地计算机上运行网站时,所有图像都可以正常加载.但是当我在IIS上部署并运行该网站时,没有任何图像被加载.
错误 -
Failed to load resource: the server responded with a status of 404 (Not found) http://54.234.60.214/Images/Logo_Innosolv.jpg
Failed to load resource: the server responded with a status of 404 (Not Found) http://54.234.60.214/Images/Icons/bid.png
Run Code Online (Sandbox Code Playgroud)
什么似乎是问题?我是将图像移动到其他文件夹还是更改我在视图中引用它们的方式?
在我的 Rails API 中,我添加了一个初始化程序,它将把 JSON 输入的键从蛇形大小写更改为下划线分隔。就像这样:
ActionDispatch::Request.parameter_parsers[:json] = -> (raw_post) {
data = ActiveSupport::JSON.decode(raw_post)
data = {:_json => data} unless data.is_a?(Hash)
data.deep_transform_keys!(&:underscore)
}
Run Code Online (Sandbox Code Playgroud)
现在,某些 API 将通过标头传递:content-type: multipart/form-data而不是application/json
我想对这样的 API 做同样的事情。即添加一个初始化程序来转换参数中键的大小写。
我尝试过ActionDispatch::Request.parameter_parsers[:form_data],但没有成功。
我怎样才能实现这个目标?
我正在尝试使用循环从数据库中读取一些记录,然后对记录进行一些计算(更新名为total的字段).
但我是春季批次的新手所以请任何人都可以提供一些提示.
我正在将我的 Rails 应用程序从使用 PaperClip 迁移到 ActiveStorage。
在我的一个模型中,我有以下方法(使用回形针):
class ECard < ActiveRecord
def thumb_url
self.attachment.url(:thumb)
end
end
Run Code Online (Sandbox Code Playgroud)
在控制器中,我有:
def by_type
@e_cards = ECard.where(type_id: params[:type_id]).as_json(:only => [:id, :name], :methods => [:thumb_url])
respond_to do |format|
format.json { render json: @e_cards }
end
end
Run Code Online (Sandbox Code Playgroud)
现在,我正在使用 ActiveStorage,如何从thumb_url方法中获取附件的缩略图 url ?
作品:Rails.application.routes.url_helpers.rails_blob_path(attachment, only_path: true)
不起作用:Rails.application.routes.url_helpers.rails_blob_path(attachment.variant(resize: '200x200'), only_path: true)这会引发错误:NoMethodError (undefined method 'signed_id' for #<ActiveStorage::Variant:0x00007fac1960eab0>)
我如何实现这一目标?
有人可以告诉我为什么会这样吗?
我使用Ruby on Rails创建了一个社交网站。这是我第一次使用RoR编程。
我有一个名为“ Friendship”的模型,其中包含一个属性“ blocked”,以指示该用户是否已阻止另一个用户。
当我在IRB中运行以下命令时-
friendship = u.friendships.where(:friend_id => 22).first
Run Code Online (Sandbox Code Playgroud)
IRB给我-
Friendship Load (0.6ms) SELECT `friendships`.* FROM `friendships` WHERE `friendships`.`user_id` = 17 AND `friendships`.`friend_id` = 22 LIMIT 1
=> #<Friendship id: 33, user_id: 17, friend_id: 22, created_at: "2012-04-07 10:29:49", updated_at: "2012-04-07 10:29:49", blocked: 1>
Run Code Online (Sandbox Code Playgroud)
如您所见,“已阻止”属性的值为“ 1”。
但是当我运行以下命令时
1.9.2-p290 :030 > friendship.blocked
=> nil
Run Code Online (Sandbox Code Playgroud)
-它说,blocked的值是'nil'而不是'1'。为什么会这样呢?这可能是一个非常愚蠢的错误,但是我是RoR的新手,请帮助我!
最初我没有为'blocked'包括accessor方法。我尝试过,但仍给出了相同的结果。
class Friendship < ActiveRecord::Base
belongs_to :friend, :class_name => "User"
validates_uniqueness_of :friend_id , :scope => :user_id
attr_accessor :blocked
attr_accessible :blocked
end
Run Code Online (Sandbox Code Playgroud)
这是表的架构:
1.9.2-p290 …Run Code Online (Sandbox Code Playgroud)