[英]Change a variable or activate a JS-linked <select> dropdown with Greasemonkey
[英]How to activate scopes with a select dropdown
我有一個選項下拉列表,我想在選擇這些選項時激活不同的功能。
這是我正在使用的一些HTML:
<select>
<option value="all">all</option>
<option value="tasks">tasks</option>
</select>
這是我的模型中的一些代碼:
class Post < ActiveRecord::Base
scope :task, -> { where(ideas: true) }
end
這是我的控制器中的一些代碼:
def index
#display posts with the params sent through the search bar
#display the posts with by the params sent through clicking a tag
if params[:tag]
@posts = Post.all.order("created_at DESC").tagged_with(params[:tag])
elsif params[:search]
@posts = Post.all.order("created_at DESC").tagged_with(params[:search])
elsif params[:user]
#will eventually be for user's profile page
@user = User.find(params[:user_id])
@posts=@user.posts
else
@posts = Post.all.order("created_at DESC")
end
end
很基本。
當我選擇“任務”時,我希望激活任務范圍-本質上,我希望所有帶有嵌套屬性“任務”的帖子(我正在使用繭形寶石創建不同的帖子類型)在選擇“任務”選項。
范圍可能不是最好的方法。 如果您還有其他建議,我很樂意接受。
我已經成為控制器的支持者,幾乎什么也不做。 相反,他們只是簡單地調用另一個對象並傳遞工作。 這使您基本上可以放棄測試控制器。 相反,此方法提供了一些易於隔離和測試的不錯的PORO。
在上面的示例中,我將有一個像這樣的控制器。
def index
finder = PostFinder.new(params)
@posts = finder.posts
end
現在您的控制器很愚蠢,讓這個新對象完成工作
class PostFinder
def initialize(args={})
@posts = []
find_posts(args)
end
def posts
@posts
end
private
def find_posts(args={})
# Magic hidden code to find your posts
#@posts << posts we found...
end
end
對於范圍界定問題,您將需要確保它已包含在搜索表單提交中
<select name="scope">
<option value="all">all</option>
<option value="tasks">tasks</option>
</select>
它將在參數中。 控制器會將這些參數傳遞給PostFinder
對象,然后從那里直到該對象包含有關參數如何過濾帖子的邏輯。
例如, find_posts
在方法PostFinder
將訪問該PARAM
def find_posts(args={})
if args[:scope]
scoped_posts = Post.method(args[:scope]).call
end
# continue filter logic as needed
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.