复杂的网站结构 - Rails

时间:2014-10-07 10:32:03

标签: ruby-on-rails ruby-on-rails-4 associations

我认为我是Ruby on Rails(以及一般的网页设计)的高级初学者。我有这个项目,我无法解决如何实现最近的开发。

最初,该项目是一个简单的博客,供企业发布宣传其公司的文章。它仅适用于特定城镇的企业,我可以毫无困难地设置它。现在我们正在努力扩大规模,让网站迎合许多城镇。

我们想要一个选择城镇的主页。这会将您带到该城镇企业的博客帖子列表中。你可以导航到一个目录,联系我们表格,个人资料页面等。我的问题是,我希望每个城镇都像迷你网站一样,所以目录只显示与城镇相关的业务和标题图像变化以反映哪个你选择的小镇。

我最初解决这个问题的方法是建立一个城镇脚手架,并在城镇,用户和岗位之间建立联系。问题是以某种方式“存储”所选择的城镇,以便我可以例如仅显示目录中特定城镇的商家。

目前我在帖子模型中

belongs_to :user

在用户模型中

has_many :posts
has_many :towns

我在城镇控制器中有一个动作来处理只有以下行的目录:

@users = User.order('trading_name ASC').where(:town => @town.id.to_s)

然后我想在目录视图中显示这些用户。

我的城镇控制器中还有以下内容

before_action :set_town, only: [:show, :edit, :update, :destroy, :directory]

说实话,我不能完全围绕所需的协会,或者即使这是正确的路径。目前我尝试访问目录视图时出现以下错误

Couldn't find Town without an ID

它在城镇控制器中引用了以下方法(我正在使用friendly_id gem)

def set_town
  @town = Town.friendly.find(params[:id])
end

我是否正确地沿着正确的路线前进(并且遗漏了某些东西),或者我可以采取更好的方法。另外,我希望我已经清楚地解释了自己。请问是否有令人困惑的事情。

1 个答案:

答案 0 :(得分:1)

我不确定您的要求是什么,但我要说:

用户可能没有"有很多"城镇。

用户确实有很多"帖子。
一个小镇确实有很多"讯息。

帖子属于城镇,也属于用户。

然后,在您的主页上,您有一个带有城镇下拉列表的表单,它应该汇总到choose_town之类的操作。

您的choose_town操作应该在Cookie中保存城镇的名称或ID。你知道饼干吗?它们基本上允许您为特定用户在请求之间保存一点信息。它们存储在用户浏览器中,但在每次请求时都会从服务器发回。见http://guides.rubyonrails.org/action_controller_overview.html#cookies

然后,调用每个请求的set_town方法会在Cookie中查找正确的城镇。

编辑:@japed提到的会话,以及cookie。会话由cookie标识 - 但是,存储在会话中的信息保存在服务器上,而不是在浏览器和服务器之间来回发送。在这种情况下,任何一个都可能没问题。